内存寻址与数组混淆

时间:2012-01-09 10:35:27

标签: c++ c storage memory-address

让我们有一个int类型的数组: -

        int arr[5]; 

现在,

       if arr[0] is at address 100 then
       Why do we have;
       arr[1] at address 102 , 
       arr[2] at address 104 and so on. 

而不是

       arr[1] at address 101 , 
       arr[2] at address 102 and so on. 

是因为整数需要2个字节吗?

每个内存块是否具有1个字节容量(无论是32位处理器还是64位)?

3 个答案:

答案 0 :(得分:3)

  

这是因为整数需要2个字节?

显然在您的系统上,int的大小为2.在其他系统上,情况可能并非如此。通常int的大小为4或8字节,但也可以使用其他大小。

答案 1 :(得分:3)

您的第一个示例与16位ints一致。

关于你的第二个例子(&arr[0]==100&arr[1]==101&arr[2]==103),这不可能是有效的布局,因为连续元素之间的距离在第一对和第二

答案 2 :(得分:0)

你是对的,在你的机器上,sizeof int是2,所以数组中的下一个可能的值将是前一个2字节。

-------------------------------
|100|101|102|103|104|105|106....
-------------------------------
arr[0]  arr[1]  arr[2]

int的大小没有保证。 C ++规范只是说sizeof(int)> = sizeof(char)。这取决于处理器,编译器等。

了解更多信息try this