【发布时间】:2018-06-26 12:43:31
【问题描述】:
1) #include <stdio.h>
int main()
{
int a[5] = {1,2,3,4,5};
int *ptr = (int*)(&a+1);
printf("%d %d", *(a+1), *(ptr-1));
return 0;
}
输出为 2 5。 &a 表示a[0] 的地址,所以&a+1 应该是a[1] 的地址。所以ptr 应该是a[1] 的地址。 *(a+1) 将是 2,但 *(ptr-1) 也应该是 2。我不明白它是如何打印 5。
【问题讨论】:
-
&a表示a的地址,而不是a[0]。a的类型是int[5],所以&a + 1将sizeof(a)(即sizeof(int) * 5)添加到该地址。你想使用int *ptr = (int*)(&a[0] + 1); -
用
a+1或&a[0] + 1初始化你的ptr,不需要强制转换。 -
如果
ptr确实拥有a[1]的地址,那么*(ptr - 1)将是1,而不是2