#define n 10;
对于二维数组a[n][n]
1--数组名(a)表示行地址,逻辑意义上并不能表示首元素地址。
2--a[0],a[1]叫做列地址,逻辑意义上就表示某行首元素地址。
物理上行地址就是某行首元素地址。甚至你用scanf时用行地址也是可以进行赋值的。(因为scanf是传地址的)。但你如果想像a[0][0]=1这样直接进行赋值,只能先将行地址转换成列地址。
#include <stdio.h>
#define N 10
int main() {
int a[N][N];
printf("%p\n",a);
printf("%p\n",a[0]);
printf("%p\n",&a[0][0]);
}
000000000062FC90
000000000062FC90
000000000062FC90
3--行地址和列地址可以相互转换
行转列*(a+1)
列转行&a[0]