二维数组,数组名为第数组第一个元素的地址即a为&a[0][0],第一行的行名(为一维数组a[1])也为第一个元素地址,同理第二行的行名为第二个行第一个元素的地址即a[0]为&a[0][0].a[2]为&a[2][0],综上即a==a[0]==&a[0][0],a[2]==&a[2][0] 数组名加一为行数加一即a+1为第二行即a+1==&a[1]注:&a[1]==a[1]表示第一行的地址,一维数组加一为二维数组的地址即a[0]+1==&a[0][1] 其实以上一维数组就可以看成指针。
运行以下程序可知
1. #include<stdio.h>
2. void main()
3. {
4. int a[3][2]={{1,2},{2,3},{4,5}},*p;
5.
6. printf("%d %d %d %d %d %d%d %d %d\n",a,a[0],a[0]+1,a+1,a[1],a[1]+1,a+2,a[2],a[2]+1);
7. printf("%d %d %d %d %d %d%d %d%d\n",&a[0],&a[0][0],&a[0][1],&a[1],&a[1][0],&a[1][1],&a[2],&a[2][0],&a[2][1]);
8. }
“*”代表取内容,所以*a即为a[0],*a[0]即为a[0][0],*(a+1)为第二行的地址,*(a+1)+1为第二行第二列的地址,“*”理解为把地址中的数据读出来,a的内容就是第一行。
1. #include<stdio.h>
2. void main()
3. {
4. int a[3][2]={{1,2},{3,4},{5,6}};
5.
6. printf("%d %d %d %d %d\n",*a,*(a+1),*(a+1)+1,**(a+0)+1,*a[0]);
7. }运行则知