<分区>
我在竞赛试卷中找到了这个程序:
#include <iostream>
void main()
{
int a[5] = { 1, 2, 3, 4, 5 };
int *ptr = (int*)(&a + 1);
printf("%d %d ",*(a + 1), *(ptr - 1));
}
输出是2 5
现在,当我将第 5 行更改为 int *ptr=(int*)(&a);
时和 printf("%d %d ",*(a + 1), *(ptr));
输出变为2 1
在第一种情况下 ptr
得到了 array+1
的最后一个地址在第二种情况下 ptr
得到相同的数组地址(a
的地址)。
我的疑问是,当 a 递增并分配给 ptr
时,为什么此分配会显示不同类型的行为?什么时候a
分配给 ptr
不递增?