书上说,二维数组名就是指针的指针。数组名是指向二维数组的行地址存储空间的首地址,也就是指针数组。那么:
int a[3][3] = {1,2,3,4,5,6,7,8,9};
a -> a[0] a[1] a[2]
a[0]-> 1 2 3
a[1]-> 4 5 6
a[2]-> 7 8 9
如果:
int **p;
p = a;
为什么P就能等价于a了呢?我真的是想不明白。请指教。
int aa[2][2]={1,2,3,4};
int *p;
因为二维数组是线性结构,可以把它看成一维数组,aa[4]={1,2,3,4};
这时,p=aa,p指向的是aa中的第一个元素,所以*p=1;
同理,*(p+1)=2;,*(p+2)=3;,*(p+3)=4;
如果想告诉编译器,p指向的空间是一个二维空间,则可以构造一个二维指针数组,每个指针指向二维数组中的一个元素:int *p[2][2](不带括号相当于 int *(p[2][2]) ),此时,用p[0][0]=aa,表示将aa数组中的第一个元素的地址赋给p指针数组中的第一个指针,于是,打印*p[0][0],就可以打印出1
to copygirl(wa!)
为何要定义个二维的指针数组,定义一个一维的指针数组对二维数组进行行的操作
int *a[3];
int aa[3][5];
a[0]=aa[0][0];
a[1]=aa[1][0];
a[2]=aa[2][0];
a[0]->aa[0][0] aa[0][1] aa[0][2] aa[0][3] aa[0][4]
a[1]->aa[1][0].....
a[2]->aa[2][0]