对于一个二维数组a来说:
&a[1] 表示第二行的地址
a[1] 表示第二行的首元素地址
举例来说,假设我们有以下的二维数组a:
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
那么,
- &a[1] 等价于 a + 1,即第二行的地址。
- a[1] 等价于*(a + 1) ,即第二行的首元素地址,也就是 a[1][0] 的地址。
两者值是相等的,但是后者是对前者的解引用,才能得到a[1]也就是a[1][0]的地址。从某种角度上来说可以理解为对行地址解引用就可以得到该行首元素地址。也就是列地址加上&会改为行地址,行地址加上*会改为列地址。
需要注意的是,虽然&a[1]和a[1]的值是相等的,但它们的类型是不同的。&a[1] 的类型为指向 int [3] 数组的指针(即 int (*p)[3]),而 a[1] 的类型为指向 int 数组元素的指针(即 int)。
因此,在使用时需要注意类型的匹配,以免出现类型错误的问题。