A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Melody_cw 中级黑马   /  2014-7-20 19:50  /  1301 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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;然后这里为什么就不用加&呢,加了就会报错

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 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

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
fantacyleo 发表于 2014-7-20 20:02
数组名是指针,该指针的类型由数组元素的类型决定。int a[3]的元素类型是int,因此a是指向int的指针,只有 ...

后者我倒是理解了,类似于char **a 和char **c一样呢,直接就是把值给它
前者这个我可以理解成是char **a 和char *c的问题么,a  =&c

点评

正确!  发表于 2014-7-21 11:15
回复 使用道具 举报
Melody_cw 发表于 2014-7-21 11:09
后者我倒是理解了,类似于char **a 和char **c一样呢,直接就是把值给它
前者这个我可以理解成是char **a ...

啊,太谢谢你了,理解了这个以后,对指针的认知又是一个提升
回复 使用道具 举报
本帖最后由 x65396731 于 2014-7-21 12:32 编辑

ls说得对
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马