0

我试图找出声明变量时基本数据类型的存储位置以及基本数据类型的二进制表示形式。下面是一些从数组之外获取数据的代码。根据我声明数组 YoMammy[]; 的方式,与最后一行有关的输出会有所不同。签名或未签名。我知道这是正常的,但我不知道基本数据类型存储在哪里。此信息是否与指针一起存储?我知道数组只是引用指针的另一种方式。

int main()
{
    unsigned int YoMammy[2]={3,7};

    cout<<YoMammy[0];
    cout<<endl;
    cout<<YoMammy[1];
    cout<<endl;
    cout<<YoMammy[2];

    return 0;
}
4

4 回答 4

0

访问超出数组范围的元素会导致未定义的行为。你可能会得到一些值YoMammy[2],你可能会得到一个分段错误,或者发生一些奇怪的事情。

我知道数组只是引用指针的另一种方式。

啊,不,不,不。在许多情况下,数组名被转换为指向其第一个元素的指针。但是数组不是指针。

此外,您可以将调用链接到std::cout,这让您的生活更轻松:

std::cout << YoMammy[0] << std::endl << YoMammy[1] << std::endl << YoMammy[2];
于 2013-10-21T02:12:16.253 回答
0

逻辑意义上的阵列是物理上的存储。这意味着它是一个有多个街区的位置。 int would = i=[9]是名称的一个位置。而一个阵列在同一位置有多个插槽array=[][][][][][][][]

于 2013-10-21T02:12:59.453 回答
0

没有存储描述 C++ 中简单数据类型的元数据。您正在观察有符号整数和无符号整数之间的某种关系只是一个巧合。

这就是未定义的行为。它可能表现出一种模式,但它没有被定义。不要试图定义没有定义的行为。=)

于 2013-10-21T02:13:14.520 回答
0

问:变量存储在哪里?

您可以打印地址并亲自查看变量所在的位置。

std::cout<<"Location of YoMammy[0]: "<<&YoMammy[0]<<std::endl;
std::cout<<"Location of YoMammy[1]: "<<&YoMammy[1]<<std::endl;

由于您声明的那些是本地main()功能。它们存储在堆栈段中。

问:与最后一行有关的输出因我声明数组 YoMammy[] 的方式而异;签名或未签名

数组索引从0until开始n-1n是数组的大小。

( YoMammy[2]) 越界访问是未定义的行为。它可能导致Segmentation FaultStack Smashing或只是打印一些垃圾值(你不能指望它每次运行程序时都是一样的)等等,

问:我知道数组只是引用指针的另一种方式。

不,数组不是指针。尽管数组名称衰减为指向数组第一个元素的指针。也有例外。读这个

于 2013-10-21T02:19:06.300 回答