|
发表于 2012-5-21 05:37:33
|
显示全部楼层
初学者这是个难点!
第一个:
int a[10] = {0};
int *p;
p = a;
这里p= a没有错,
//因为你定义的是一维数组a[10],数组名就是首元素的地址,即&[0],所以可以赋值给指针p;
第二个:
int a[3][4] = {0};
int *p ;
p = a;
这时是错的
//你定义了一个二维数组a[3][4],二维数组不同之处是:你可以把它看为三个一维数组,
a[0]是一级指针,指向一个数组,这个数组的元素是a[0][0],a[0][1],a[0][2],a[0][3];
a[1]是一级指针,指向一个数组,这个数组的元素是a[1][0],a[1][1],a[1][2],a[1][3];
a[2]是一级指针,指向一个数组,这个数组的元素是a[2][0],a[2][1],a[2][2],a[2][3];
到这里你应该明白了,二维数组名a,指向a[0],而a[0]本身就是地址,指向a[0][0]
以一言以蔽之,a是二级指针,不能赋值给一级指针p!
第三个:
int a[3][4] = {0};
int (*p)[4];
p = a;
//int (*p)[4],定义了一个 指向一个含有四个元素的整型数组,p指向数组的首元素的地址,因此p是二级指针!!
这又是对的
|
|