c++关于指针变量地址问题

int x=6,n,*p1=&x,*p2=&x;为什么表达式p2=&p1是错误的

c++

6个回答

楼上说的对,说到底还是类型匹配的问题。C++是强类型语言,指向指针的指针变量定义必须使用TYPE **。代码写多点就明白了。表达式:
intnt x=6;
int p1=&x,
int *p2=&x,
这时候p2已经是int *类型,但是&p1是int *
类型,出错时必然的。但是可以用p2 = *(&p1),但是这时候取得还是x的地址没什么操作意义。

*p1=&x,*p2=&x

p1,p2都是int型指针变量,存放x的地址,对p1或p2进行一次取址操作即可得到x的值,其类型为: int*

&p1

&p1是p1的地址,而p1存放的又是x的地址,所以对&p1需要两次取址操作才能得到x的值,其类型为 int**

p2=&p1

等式两侧类型不匹配,编译时会报类型转换错误。

写的有点不清楚 按照我的理解回答你 =是赋值 假如你是想比较两者 将p2=&p1改p2==p1 另外&p1!=&p2

我也正在学c++。我就以我的理解来尝试回答一下这个问题。
对题的理解:你是想实现p2指向p1,然后p1指向x吧,用书面的语言就是指针的指针。

【回答】:当时我看到这个指针的指针的时候,我也尝试过题主的那种表示方式。我说不上来是什么原因。但是我想既然p2要指向p1,然后再指向x,
那么p2取两次内容就应该是x。而你在定义p2的时候却只有一个*,所以程序不能实现。

我就把书上关于指针的指针,表示方法写出来。
int x;
int *p2 = &x;
int **p3 = &p2;

因为&p1是指针的指针,而p2是指针,类型不匹配

大家说的都对,主要是赋值类型不同的问题。p1和p2都是指针类型,而&p1已经是指针的指针,所以类型不匹配。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!