深入理解二维数组

 1 #include<stdio.h>
 2 #define debug 0
 3 int main()
 4 {
 5     int a[3][4]={{8,2,6,4},{1,4,7,9}},i,j;
 6     #if debug
 7     a++;
 8     a[0]++;
 9     a[1]++;
10     a[2]++;
11     a[3]++;
12     #endif 
13     printf("a:%p      a+1:%p\n\n",a,a+1);//相差16字节 
14     
15     printf("a[0]:%p  a[0]+1:%p  &a[0][1]=%p\n",a[0],a[0]+1,&a[0][1]);    
16     printf("a[1]:%p  a[1]+1:%p  &a[1][1]=%p\n",a[1],a[1]+1,&a[1][1]);
17     printf("a[2]:%p  a[2]+1:%p  &a[2][1]=%p\n",a[2],a[2]+1,&a[2][1]);
18     printf("a[3]:%p  a[3]+1:%p  &a[3][1]=%p\n",a[3],a[3]+1,&a[3][1]);
19     return 0;
20 }//a[0] ,a[1],a[2],a[3]是一维数组名,代表一维数组的起始地址,是地址常量
21 //a+1和a的地址差16个字节,相当于四个元素,a代表第一行的地址,a+1代表第二行的地址。
22 /*a[0]+1和a[0]的地址差4个字节,相当于1个数组元素。因此a[0]+1相当于元素a[0][1]的地址
23 a[1]+1=&a[1][1],a[2]+1=&a[2][1] */

posted @ 2016-05-24 17:09  自由石匠  阅读(226)  评论(0编辑  收藏  举报