a和&a有什么区别?

假设数组int a[10]; int (*p)[10] = &a;其中:

  • a是数组名,是数组首元素地址,+1表示地址值加上一个int类型的大小,如果a的值是0x00000001,加1操作后变为0x00000005。*(a + 1) = a[1]。
  • &a是数组的指针,其类型为int (*)[10](就是前面提到的数组指针),其加1时,系统会认为是数组首地址加上整个数组的偏移(10个int型变量),值为数组a尾元素后一个元素的地址。
  • 若(int *)p ,此时输出 *p时,其值为a[0]的值,因为被转为int *类型,解引用时按照int类型大小来读取。

发表评论

后才能评论

评论(3)

  • 普通 2021-12-22 11:03 上午

    &a这里的&是取地址,应该不能说数组的指针,定义p指针指向这a的地址。应该是这样的吧?求回复

    • 帅地 永久会员 @ 2021-12-23 7:52 下午

      你说的貌似也没啥问题

    • mpweixin用户 普通 @ 2022-07-12 6:32 下午

      说的是没问题那如果 int a[2][3]
      int p = &(arr[0][0]); 你回答我p指向arr[0][0]的地址
      int (
      p2)[2] = &a[0]; p2指向a[0]的地址
      int (*p3)[2][2] = &a; p3指向a的地址
      遇到脾气不好的,能不能直接踹你