main(){
long a[4] = {1, 2, 3, 4};
long *p1=(long *)(&a+1);
// long *p1=(&a+1);//整个数组地址的下一个long数组的首地址,即存储整个数组a的最后一个字节的下一个字节内存的地址
// long *p1=(&a[0]+1);//数组第1个元素地址的下一个long的元素首地址,即数组第2个元素的首地址
// long *p1=(long*)(&a[0]+1);//同上
long *p2=(long *)((long)a+1);
printf("%lx\n", p1[-1]);
printf("%lx\n", *p2);
}
(&a+1)和(&a[0]+1)中的1不同,前者的是整个数组的长度,后者是数组元素数据类型的长度