【发布时间】:2019-07-01 21:43:04
【问题描述】:
抱歉,我很沮丧,并在没有适当细节的情况下通过手机发布了问题
考虑以下 C++ 代码:
int arr[2];
arr[0] = 10;
arr[1] = 20;
// cout << &arr;
for (int i = 0; i < 2; i++)
{
cout << &arr + i << "\t\t"<<endl;
}
cout << sizeof (arr);
cout in for 循环打印如下
0x7ffeefbff580 0x7ffeefbff588
比第一个元素多8个字节
我的问题是,如果在我的机器上 sizeof(int) 为 4,为什么它是 8 个字节而不是 4 个字节?
【问题讨论】:
-
您使用的是哪个编译器、工具集、操作系统?
-
@FaisalKhan 极不太可能
sizeof(arr)返回2。向我们展示代码。 -
@FaisalKhan 这个
&arr返回一个指向int[2]的指针,它是一个大小为8的结构。 它不返回指向 int 的指针。所以&arr + 1向前移动了 8 个字节。&arr[1]不是 8 个字节。因为你应该做的是&arr[0]而不是&arr因为&arr[0]是一个指向int的指针 而&arr不是。它们指向同一个地方,但大小不同,因此指针算法的工作方式不同。 -
@FaisalKhan 当您执行
&arr + i时,您得到的是(&arr) + i,而您真正想要的是(arr + i)(在这种情况下不需要与号)。