地址&a和首地址&a[0]的区别

发布时间 2023-04-25 09:17:23作者: 败人两字非傲即惰
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不同,前者的是整个数组的长度,后者是数组元素数据类型的长度