指向数组的指针
定一个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的数组,不管该数组是一维或二维,甚至更高维。 谢谢各位了, 展开
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的数组,不管该数组是一维或二维,甚至更高维。 谢谢各位了, 展开
6个回答
展开全部
再定义一个指向长度为3 的数组的指针,是要求定义指针数组还是定义一个指针指向数组,
1.---------如果是后者,int (*p)[3]就不需要指定长度了,
2.---------如果是前者,则P为数组,P中的每个元素都是一个指针,都需要指向一个数组,就是三个数组
3.----------再者p = &a;中,数组名就代表数组地址不需要“&”符号,先去掉&试试吧
1.---------如果是后者,int (*p)[3]就不需要指定长度了,
2.---------如果是前者,则P为数组,P中的每个元素都是一个指针,都需要指向一个数组,就是三个数组
3.----------再者p = &a;中,数组名就代表数组地址不需要“&”符号,先去掉&试试吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
等下,为什么我用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] 的。
首先,我觉得,你如果想通过 一个数组指针来随机访问一个已知的数组a[3]的话,其实根本没必要,因为 p = &a; 执行了以后,只能通过 (*p)[0]来访问a[0],却不能用(*p)[1]来访问a[1]。
共同讨论!
其实这样完全没有应用价值,因为就算 p 得到了a的地址,但是p+1会按照p的大小就是4*3=12来增加,所有 完全不能用(*p)[1]来访问a[1] 的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p确实按你说的是指向一个长度为三的数组的指针。所以p = &a绝对没有错误,是不是你别的地方写错了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我用的是codeblocks,编译器是GNU GCC Compiler。我确认了一下,答主完全没有错误。赋值无论是p=&a,还是直接是p=a,都会给予警告:warning: assignment from incompatible pointer type [enabled by default],但是都能够得到正确的结果。无论哪种,用*p才能等价于a,然后可以(*p)[0]这样引用其中的元素。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询