C语言二维数组地址问题

最近在自学二维数组,对书上的几个定义不知道怎么理解,求教导~万分感谢!

printf("%d,%d",&a[1]+1,a[1]+1);//前者输出第二行首地址,后者输出第一行第一列元素地址,这是为什么要怎么理解。
书上还有一句定义:&a[i]指向行,而a[i]指向列,不知怎么理解。

再次感谢!!!

你可以对比一维数组来理解,把一行也看成是一个元素,我用语言描述也说不清,就发张手绘图吧
图片说明

在a[i]+i中,a[i]指向行,i指向列,比如a[0]+0指向的是第一行第一列的地址;a[1]+1 指向的是第二行第二列的地址

二维数组a,a是数组地址,指向行;有一个等价关系 a[i]=*(a+i)
a[i]指向列,&a[i]又指向行。

你可以将*和&理解为相反的操作:
a指向行,*(a+i)指向列,*(*(a+i)+j)等价于a[i][j];
&a[i][j]指向列。但是&&a[i][j]是语法错误。


二维数组a,a是数组地址,指向行;有一个等价关系 a[i]=*(a+i)
a[i]指向列,&a[i]又指向行。

你可以将*和&理解为相反的操作:
a指向行,*(a+i)指向列,*(*(a+i)+j)等价于a[i][j];
&a[i][j]指向列。但是&&a[i][j]是语法错误。


&是取址,所以取得是指向列的。那不就是行吗?