C语言 指针问题

若有定义语句:inta[2][3],*p[3];则以下语句中正确的是()A.p=a;B.p[0]=a;C.p[0]=&a[1][2];D.p[1]=&a;答案是B,但是我... 若有定义语句:int a[2][3],*p[3];则以下语句中正确的是()
A. p=a;B.p[0]=a;
C.p[0]=&a[1][2]; D.p[1]=&a;
答案是B,但是我在其他地方看到似乎A这种表达也没有错误,还望高手能够解释一下。还有*p[3]是不是等价于*(p[3])?
展开
 我来答
IDC_DAVID
2011-03-26
知道答主
回答量:17
采纳率:0%
帮助的人:0
展开全部
int a[2][3], *p[3];
分析:
对于a来说,毫无疑问,a是一个二维数组,a的值指向int类型的起始地址。
对于p,首先p先与'[ ]'结合 p[3],表示p是一个数组,p再与'*'结合成' *p[3] ',表示p数组里面存放的时指针变量,最后与int类型结合成' int *p[3] ',表示数组存放的时指向int类型的指针。
p[0]=&a[1][2];
所以p[0]的值是一个指向int类型的指针。
而a[1][2]的值是一个int类型,再加上'&'(取地址符)得到的就也是一个指向int类型的指针了。
所以p[0]=&a[1][2];成立。
建议ZL看看 《让你不再害怕指针》
回答完毕.
andy880927
2011-03-25 · 超过11用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:35万
展开全部
*p[3]是一个指针数组 每一个数组元素都是一个int指针
A的错误在于p是这个指针数组的指针 如果把p的值改了 那这个指针数组就成垃圾内存了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8cbe39434
2011-03-25
知道答主
回答量:14
采纳率:0%
帮助的人:0
展开全部
*p[3] 这是指针数组 里面的元素就是指针

正常来说A也是没问题的 但有可能会报错。需要强转,但寻址是没问题的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sun_siliang
2011-03-25 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4485万
展开全部
若有定义语句:int a[2][3],*p[3];则以下语句中正确的是(C)
A. p=a;//错误,类型不匹配
B.p[0]=a;//错误,类型不匹配
C.p[0]=&a[1][2];//正确
D.p[1]=&a;//错误,类型不匹配

测试程序如下。下面这个程序能编译成功,换成其他不能成功。
#include<stdio.h>
void main()
{
int a[2][3],*p[3];
p[0]=&a[1][2];
}
追问
请问如何解释?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qiangding520
2011-03-26
知道答主
回答量:6
采纳率:0%
帮助的人:0
展开全部
他们不等价啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式