
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 我想知道都错在哪里????请详细讲解下。 展开
(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 我想知道都错在哪里????请详细讲解下。 展开
4个回答
展开全部
全部都是错的,这一点是完全可以肯定的。
对于(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。所以我认为答案是错误的。
如果我的解答有任何漏洞,还望多多指教!
对于(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。所以我认为答案是错误的。
如果我的解答有任何漏洞,还望多多指教!
展开全部
楼上说的不对,变量声明了当然是可以取地址的,是可以用&的,
(1)是错的是因为int a,*p,*q,p=q=&a;
p=q=&a前面是个逗号,也就是说,先声明int *p, 后面又声明 int p, 也就是将变量p声明了两次不同类型,所以是不对的,
(4)是对的,所以选D
好吧,我说的楼上楼上。。。。
(1)是错的是因为int a,*p,*q,p=q=&a;
p=q=&a前面是个逗号,也就是说,先声明int *p, 后面又声明 int p, 也就是将变量p声明了两次不同类型,所以是不对的,
(4)是对的,所以选D
好吧,我说的楼上楼上。。。。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
选项(1)中"int a,*p,*q,p=q=&a;"中的"int a,*p,*q"和"p=q=&a;"之间是逗号,而不是分号,所以是错的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(1)里的a,只是一个变量,是没有地址的,因而不能使用&。(4)那儿同理。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询