#include<stdio.h>
int main()
{
int a[5]={1,2,3,4,5];
int *ptr=(int *)(&a+1)
printf(“%d,%d\n”,*(a+1),*(prt-1);
}
~
一定很绕吧,我也糊涂了 琢磨了一早上
C语言里面规定a是数组的首地址是代表整个数组 但&a+1不等价于&a[0]+1, &a是首地址 &a+1就是取a 的地址在加1直接指向下一个内存区域 也就是指向到了ptr[0]的地址是地址上面 然后在把&a+1 的地址复制给ptr指针 这时候ptr变指向了a[5] ,ptr-1=a[4] 最后结果2,5