数据类型的存储位置和表示

时间:2013-10-21 02:04:44

标签: c++

我试图找出声明变量时基本数据类型的存储位置以及基本数据类型的二进制表示形式。下面是一些从数组之外获取数据的代码。根据我如何声明数组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 个答案:

答案 0 :(得分:0)

访问数组范围之外的元素会导致未定义的行为。您可能会获得YoMammy[2]的某些值,您可能会遇到分段错误,或者发生奇怪的事情。

  

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

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

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

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

答案 1 :(得分:0)

逻辑意义上的数组是物理中的存储。 这意味着它是一个带有几个块的位置。 int would = i=[9]是该名称的一个插槽。而阵列在同一位置array=[][][][][][][][]

中有多个插槽

答案 2 :(得分:0)

没有存储的元数据描述了C ++中的简单数据类型。你只是观察有符号整数和无符号整数之间的某种关系,这只是一个共同发生。

这是未定义的行为。它可能会显示一个模式,但它没有定义。不要尝试定义没有定义的行为。 =)

答案 3 :(得分:0)

  

问:变量存储在哪里?

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

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

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

  

问:关于最后一行的输出是不同的,这取决于我如何声明数组YoMammy [];签名或未签名

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

YoMammy[2])访问界限是未定义的行为。它可能导致分段错误堆栈粉碎或只打印一些垃圾值(每次运行程序时都不能指望它们相同)等。 ,

  

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

没有。数组不是指针。尽管数组名称衰减为指向数组第一个元素的指针。它有例外。阅读 this