C语言 选择 求教 关于指针

有四组对指针变量进行操作的语句,以下判断正确的选项是()(1)int*p,*q;q=p;inta,*p,*q,p=q=&a;(2)inta,*p,*q;q=&a;p=*q... 有四组对指针变量进行操作的语句,以下判断正确的选项是()
(1)int *p,*q;q=p;
int a,*p,*q,p=q=&a;
(2)int a,*p,*q;q=&a;p=*q;
int a=20,*p;*p=a;
(3)int a=b=0,*p;p=&a;*p=*q;
int a=20,*p,*q=&a;*p=*q;
(4)int a=20,*p,*q=&a;p=q;
int p,*q;q=&p;

A)正确:(1);不正确:(2)(3)(4)
B)正确:(1)(4);不正确(2)(3)
C)正确:(3);不正确(1)(2)(4)
D)以上结论都不正确

我选的是B 可答案给的是D 我想知道都错在哪里????请详细讲解下。
展开
 我来答
chanlion
2011-01-21
知道答主
回答量:23
采纳率:0%
帮助的人:24.3万
展开全部
全部都是错的,这一点是完全可以肯定的。
对于(1)我们首先要了解,指针变量在被赋予一个确定的地址时,是一个不确定的值,也就是说它可以指向任意的位置。那么int *p, *q; q = p;就是错误的,因为p, q都没有确定的地址值。int a, *p, *q, p = q = &a;是也是错误的,因为int a, *p, *q是声明语句,而p = q = &a是赋值语句,它们是不能在同一条语句中的。
对于(2)我们需要知道非地址值是不能赋值给一个指针变量的,其实也就是不同类型的变量不兼容而已,因为C语言是强制类型语言。那么int a, *p, *q; q = &a; p = *q;就是错误的,因为p是指针类型变量,而*q是int类型值。int a = 20, *p; *p = a; 是正确的。
对于(3)我们需要知道指针变量在赋予一个确定的地址时,是不确定它指向的地址的,也就是说我们无法定位这个变量,也就使用这个变量,和(1)类似的问题。那么int a = 20, *p, *q = &a; *p = *q;就是错误的,因为在 *p = *q;中p没有被赋予一个确定值,那么q就没有确定的指向,于是对q进行取值运算是一个错误的表达。int a = b = 0, *p; p = &a; *p = *q;是正确的,此时需假定q是一个事先声明且被赋予确定值的指针变量。
对于(4)我认为是正确的。首先int a = 20, *p, *q = &a; p = q;中声明了一个int 型变量a和一个指向int型变量的指针p,另一个指向int型的变量q,并将a的地址赋给q。然后是一条赋值语句,将q所指向的变量的地址,也即a的地址赋值给p。对于int p, *q; q = &p;首先声明一个int型变量,和一个指向int型变量的指针,然后是一个声明语句将p的地址赋给指针q。所以我认为答案是错误的。
如果我的解答有任何漏洞,还望多多指教!
ScorpioX
2011-01-21
知道答主
回答量:14
采纳率:0%
帮助的人:23.8万
展开全部
楼上说的不对,变量声明了当然是可以取地址的,是可以用&的,
(1)是错的是因为int a,*p,*q,p=q=&a;
p=q=&a前面是个逗号,也就是说,先声明int *p, 后面又声明 int p, 也就是将变量p声明了两次不同类型,所以是不对的,
(4)是对的,所以选D

好吧,我说的楼上楼上。。。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
豚胖
2011-01-21 · TA获得超过1087个赞
知道小有建树答主
回答量:176
采纳率:100%
帮助的人:58万
展开全部
选项(1)中"int a,*p,*q,p=q=&a;"中的"int a,*p,*q"和"p=q=&a;"之间是逗号,而不是分号,所以是错的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2011-01-21 · TA获得超过128个赞
知道答主
回答量:89
采纳率:100%
帮助的人:73.4万
展开全部
(1)里的a,只是一个变量,是没有地址的,因而不能使用&。(4)那儿同理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式