指向数组的指针

定一个int类型,长度为3的数组:inta[3]={1,2,3};再定义一个指向长度为3的数组的指针:int(*p)[3];将p指向数组a:p=&a;这里报错,当a为二维... 定一个int类型,长度为3的数组:
int a[3] = {1, 2, 3};
再定义一个指向长度为3 的数组的指针:
int (*p)[3];
将p指向数组a:
p = &a;
这里报错,当a为二维或者更高维时,是没有错误的,当a为1维时为什么会报错 ??
难道定义的指针p 不能指向1维的数组吗 ?
额,好无语,用的VS2008, 昨天运行报错,今天没改动一个字符居然能运行,我也觉得奇怪 int (*p)[3]既然定义p为指向长度为3数组的指针,那么p就应该可以指向长度为3的数组,不管该数组是一维或二维,甚至更高维。 谢谢各位了,
展开
 我来答
gaoguo128
推荐于2017-09-10 · TA获得超过101个赞
知道答主
回答量:35
采纳率:0%
帮助的人:23.3万
展开全部
int a[3] = {1, 2, 3};
int (*p)[3];
p = &a;
这样是没错的,p是一个指针类型的数据,它指向的是三个int类型的数组,要用p指向的数据可以这样(*p)[0],(*p)是解出p指向的数据,也就是数组a,其实也就是数组a的首地址,然后就可以用下标[]取数据了。
开国玩
2011-09-29 · 超过13用户采纳过TA的回答
知道答主
回答量:71
采纳率:0%
帮助的人:44.5万
展开全部
再定义一个指向长度为3 的数组的指针,是要求定义指针数组还是定义一个指针指向数组,
1.---------如果是后者,int (*p)[3]就不需要指定长度了,
2.---------如果是前者,则P为数组,P中的每个元素都是一个指针,都需要指向一个数组,就是三个数组
3.----------再者p = &a;中,数组名就代表数组地址不需要“&”符号,先去掉&试试吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CrazyKickAss
2011-09-29 · TA获得超过140个赞
知道答主
回答量:35
采纳率:0%
帮助的人:38.4万
展开全部
等下,为什么我用GNU C 可以编译通过呢?
首先,我觉得,你如果想通过 一个数组指针来随机访问一个已知的数组a[3]的话,其实根本没必要,因为 p = &a; 执行了以后,只能通过 (*p)[0]来访问a[0],却不能用(*p)[1]来访问a[1]。
共同讨论!

其实这样完全没有应用价值,因为就算 p 得到了a的地址,但是p+1会按照p的大小就是4*3=12来增加,所有 完全不能用(*p)[1]来访问a[1] 的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
翦伯Q
2011-09-29
知道答主
回答量:28
采纳率:0%
帮助的人:19.8万
展开全部
p确实按你说的是指向一个长度为三的数组的指针。所以p = &a绝对没有错误,是不是你别的地方写错了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
猎梦人2
2016-03-21 · 超过71用户采纳过TA的回答
知道小有建树答主
回答量:143
采纳率:100%
帮助的人:52.2万
展开全部
我用的是codeblocks,编译器是GNU GCC Compiler。我确认了一下,答主完全没有错误。赋值无论是p=&a,还是直接是p=a,都会给予警告:warning: assignment from incompatible pointer type [enabled by default],但是都能够得到正确的结果。无论哪种,用*p才能等价于a,然后可以(*p)[0]这样引用其中的元素。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式