黑马程序员技术交流社区

标题: 行指针的赋值问题 [打印本页]

作者: Melody_cw    时间: 2014-7-20 19:50
标题: 行指针的赋值问题
本帖最后由 Melody_cw 于 2014-7-21 11:16 编辑

int a[3] = {1,2,3};
int(*p)[3]=&a; 为什么这里一定要用取地址符号呢而不可以写成int(*p)[3] = a

int a[2][3]= {
                  {1,2,3},
                  {4,5,6}
                   };
int(*p)[3]=a;然后这里为什么就不用加&呢,加了就会报错
作者: fantacyleo    时间: 2014-7-20 20:02
本帖最后由 fantacyleo 于 2014-7-20 20:05 编辑

数组名是指针,该指针的类型由数组元素的类型决定。int a[3]的元素类型是int,因此a是指向int的指针,只有加了&才表示int数组的地址;int a[2][3]的元素类型是int数组,因此a是指向int数组的指针。int(*p)[3]是指向int数组的指针,所以int a[2][3]的a可以直接赋值给p,而int a[3]的a必须要加&才能赋值给p
作者: Melody_cw    时间: 2014-7-21 11:09
fantacyleo 发表于 2014-7-20 20:02
数组名是指针,该指针的类型由数组元素的类型决定。int a[3]的元素类型是int,因此a是指向int的指针,只有 ...

后者我倒是理解了,类似于char **a 和char **c一样呢,直接就是把值给它
前者这个我可以理解成是char **a 和char *c的问题么,a  =&c
作者: Melody_cw    时间: 2014-7-21 11:16
Melody_cw 发表于 2014-7-21 11:09
后者我倒是理解了,类似于char **a 和char **c一样呢,直接就是把值给它
前者这个我可以理解成是char **a ...

啊,太谢谢你了,理解了这个以后,对指针的认知又是一个提升
作者: x65396731    时间: 2014-7-21 11:19
本帖最后由 x65396731 于 2014-7-21 12:32 编辑

ls说得对




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2