下面代码的输出()
int main() { int a[5] = {1, 2, 3, 4, 5}; int *ptr = (int*)(&a + 1); printf("%d, %d", *(a + 1), *(ptr - 1)); return 0; }
A. 1, 1 B. 1, 3
C. 3, 3 D. 2, 5
数组名a是和&a[0]是一样的,都代表指向第一个数组元素的指针,类型为int 。所以对a + 1,就是对int 的指针进行偏移。 而&a是代表指向数组的指针,类型为int ()[5] 。那么对&a+1,偏移肯定就按数组指针的偏移大小5来算。
w123d123d123 回复 aaasss: 为什么类型是int()【5】啊
WXUN 回复 aaasss: &a + 1 将这个指针向后移动一个整数数组的大小,这即移动了5个整数的大小。
D
题目解析:
a 为...
用户登录可进行刷题及查看答案
a 为 int 型数组首地址,数组长度为 5,a + 1 表示 a[1] 的地址。
&a 可以理解为表示一个列数为 5 的 int 型二维数组的首地址,那么 &a + 1 表示列为 5 的 int 型二维数组第 1 行首地址,
然后转为 int 型指针赋值给 ptr,可以理解为 ptr 为 a[5] 的地址(可以这么理解,实际不存在 a[5]),
ptr - 1 即为 a[4] 的地址。因此正确答案为 D。
登录后提交答案