有定义 int pq,x如下有p x,q x,哪个正确?怎样才是都正确的

2021-04-18 05:08:00 字数 3401 阅读 2620

1楼:匿名用户

p=&x正确,q=&x错误,q是二级指针,不能直接指向普通变量,而应该指向一个指针变量,这么写就正确:q=&p;

c语言中指针*p=*q与p=q有什么区别

2楼:

若p和q是申明为类型兼容的指针变量,且都正确赋有合法值且不为null,那么,*p=*q是把指针q指向的目标值赋给指针p指向的目标;p=q则是使指针p指向指针q指向的目标(最终是p和q指向了同一目标,这个目标就是q指向的目标)。在q==null时,*p=*q非法操作,p=q是合法操作(使p和q同为null)。综上,除q为无效(null)时不能取值操作外,正常情况下*p=*q操作的是指针指向的目标,p=q操作的是指针本身——这是二者的本质区别。

以下**可以验证:

#include"stdio.h"

intmain(intargc,char*argv)验证结果如下:

3楼:管迪励素华

参***:我是这样认为的:*是指针运算符。我们曾可以这样去定义:int

a[10],*p,**s;

如果在下面的语句中出现了*p=a;

这就意味着指针p已经指向数组的首地址,也就是a[0],此时我们可认为指针p是一级指针.

如果在下面的语句中出现了*s=p,

这就意味着指针s指向了p的单元,而p指向了a[0]此时s离数组的首地址形象的像隔了2级

因此称s为2级指针.

对于2级指针,有**s=*(*s)=*p=&a[0]

4楼:匿名用户

*p=*q,意思是说,将q指针指向地址的值传给p指针指向的地址,此时p和q是指向不同地址的(当然是在原先p和q就不同的情况下)而p=q呢,则是说将q指针指向p指针指向的地址,此时pq指向同一位置,共享同一段内存

5楼:匿名用户

指针指向的是一个地址,但这个地址里面可能是一个变量,也可以是个常量,或者是其它类型...

p=q只是一个变量间的传数据传递

6楼:匿名用户

1)*q是指针所指向的一个字符,所以把一个字符串赋值给一个字符,显然是错误的.

2)c语言不进行强制的类型识别,所以一个字符可以以数值形式赋值,实际你赋值的内容是它的ascii码,也就是'd'

3)c语言中字符串不能直接给指针赋值,而应该使用函数:strcpy,strncpy.函数原型为:

char *strcpy( char *strdest, const char *strsource );

char *strncpy( char *strdest, const char *strsource, size_t count );

4)printf函数中使用字符串时,应该直接使用指针.而不带*

5)从这句:*p=&x;来看,p是指针的指针,所以*p是指针,所以用法是正确的.

从以上分析得出几点结论:

1)c语言对数据类型不会进行强制识别,字符型数据可以赋值为数字,字符指针可以指向数字,指针本身也会有指针.

2)指针只是指的一个地址,这个地址本身也是数据.如果把这个地址当作字符串使用的话,一定要直接使用指针,如果使用形如*p这样的用法的话,只是指的p指向的首地址的字符.

any more problems?

7楼:匿名用户

*p=*q 是指向地址

p=q是指向值

8楼:镜面世界

呃第二个前面无运算符相当于p,有运算符且p是函数名或函数指针时,加括号相当于p,不是则无意义,p是函数名且返回指针且是调用时,不加括号是返回的指针的间接引用,第一个p不是指针的话无意义,如果是指针(什么指针都行,包括函数指针等不常用的,但不能是野指针,运行时会报错),如果这个表达式前面是运算符号,相当于p,如果前面是另一个表达式,是*p与那个表达式位与,p是函数指针时加括号相当于p,p是函数指针或函数的二级指针且该函数返回引用时是返回的引用的内存地址。(呼!累死我了,给个满意啊!

看不懂的话等我有时间弄个**)

有定义int x=2,*p=&x;*q=p,一下赋值语句错误的是

9楼:开心

d是错误的,p是指针,x是变量,指针只接受地址,不能接受变量本身的值。

2. 若有以下定义,则赋值正确的是( c)。 int a ,b , *p; float c, *q; a.p=&c b.q=p c.p=null d.q=new

10楼:匿名用户

p = &c ;意思:取c的地址给p,类型不对。p要的是指向int型的变量的地址,但这里却给了个float型的。

q = p;:用p给q赋值。类型不对。p是指向int的指针,q却是指向float的指针,类型不同不能赋值。除非强制转换。

p = null; :p是一个指针,但它不指向任何变量,多以答案对的。也就是暂时先不给它赋值,以后再赋值。

如:int a = 0, *p;

p = null;

.....

p = &a;

q = new : 语法错误。new是关键字。

11楼:匿名用户

a: p=&c 由于p是int型指针,

&c是浮点型地址,类型不合,如果写成p=&a就可以了b: q=p 类似,q为浮点型指针,p为整型指针,类型不合c: p=null 任何指针都可以指向空

d: q=new 不完整语句,可以写成q=new float根据上面分析,所以只有c正确

12楼:虎光墙

a。c是浮点型的赋给整型p不对,同样b也排除,d。new是关键字,怎么能赋给q。

(6) 设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是

13楼:匿名用户

选d.a.p是一个指针,不能给它赋一个整型的值1b.

*q仍然是一个指针,*q就是p.所以也不能给它赋一个整型的值.c.

q=p;q是个二级指针,p是一级指针,不能把一级指针赋给二级指针.*p=5,即给n赋值为5,正确.

14楼:匿名用户

d p是指针q是指向批针的指针,记录的是地址多翻下书这不太好理解

15楼:匿名用户

我打假 来了 如上,*q是指针,那么p就存的是他的地址,就是n 的内存中的位置,表示为&n而**p = &q,说明**p是个指向*p的指针 即是**p的值为n,而*p里面装的呢是p,即是&n,n的内存单元**p 里面装的是*p的内存单元,在这儿**p 和*p 和q 里面都装的是内存,是数据在机器里面的地址,对于这种我们不能够用这种直接赋值的方式改变它 故而我们看a,b,c 都是这样 所以abc错误,他们都在改人家内存