定义一个二维数组a[][],关于a[0],a,a与指针的有关问题
定义一个二维数组a[][],关于a[0],a,*a与指针的问题
int *p;
int a[3][4];
p = *a;
p = a[0];
p = a;
为什么 p = a;不行,三个不是应该一样的吗?
------解决思路----------------------
int *p;
int a[3][4];
这样一个二维数组定义后,相关于a的指针有三个:
&a[0][0]-----这是int *类型的,即指向数组元素类型的(等效写法还有a[0]和*a)
&a[0]----这是int(*)[4]类型的,即指向一维数组(4个int元素)类型的(等效写法还有a)
&a----这是int(*)[3][4]类型的,即指向二维数组(三行四列个int元素)类型的
LZ遇到的问题是指针类型不一致:
指针变量是int *,所以它只能指向数组元素(int类型)
p=&a[0][0];
p=a[0];
p=*a;
都是正确的。
教给LZ一个“指向数组、数组元素的指针”的推演方法:
1.数组名和&数组名[0]等效,如a, &a[0]等效;a[0].&a[0][0]等效-----数组名前的&和最后的[0]可以同时消去
2.* 和&是互逆操作,可以同时加上或同时消去,如a[0],*&a[0]等——消去a前的&和a后的[0]得*a
int *p;
int a[3][4];
p = *a;
p = a[0];
p = a;
为什么 p = a;不行,三个不是应该一样的吗?
------解决思路----------------------
int *p;
int a[3][4];
这样一个二维数组定义后,相关于a的指针有三个:
&a[0][0]-----这是int *类型的,即指向数组元素类型的(等效写法还有a[0]和*a)
&a[0]----这是int(*)[4]类型的,即指向一维数组(4个int元素)类型的(等效写法还有a)
&a----这是int(*)[3][4]类型的,即指向二维数组(三行四列个int元素)类型的
LZ遇到的问题是指针类型不一致:
指针变量是int *,所以它只能指向数组元素(int类型)
p=&a[0][0];
p=a[0];
p=*a;
都是正确的。
教给LZ一个“指向数组、数组元素的指针”的推演方法:
1.数组名和&数组名[0]等效,如a, &a[0]等效;a[0].&a[0][0]等效-----数组名前的&和最后的[0]可以同时消去
2.* 和&是互逆操作,可以同时加上或同时消去,如a[0],*&a[0]等——消去a前的&和a后的[0]得*a