p,*p,(*p),*(*p) ,这些都表示什么意思?有什么区别,&p,(&p),&(&p),

p,*p,(*p),*(*p) ,这些都表示什么意思?有什么区别,&p,(&p),&(&p),如何理解,

p:普通变量名。
*p的含义:p是一个指针型变量,它存放一个变量的地址。
(*p):与*p相同。
*(*p)::p是一个指针型变量,它存放一个地址,在这个地址中存放着变量的地址。通常,我们把p称为“指向指针的指针”。
&p:变量p的地址。
(*p):=&p。
&(&p):无意义。追问

也就是说p本身是地址,放的是数据内容,而*p的p放的是其他数据所在的地址,而*(*p)放的是地址的地址咯?

那我比如说p=1,1的地址是为p,*p就是指的不是p这个地址里的内容1而是指p地址?,*(*p)就是指指p地址的数据所在的另外一个储存地址的空间里储存p这个地址的地址咯?

是不是有三个层面的储存空间,一个储存数据,一个储存数据的地址,一个储存地址的地址,

追答

你的理解有些意思了,但还有一点乱,来理顺一下:
声明一个变量a,就会分给它一间房子,这个房子的门牌就是它的地址,往里面安排住一个人,相当于赋值,人的名字就是数值的大小,a就是这个房间的代号。比如,地址为1001的房间代号为a,住着王力,可以表示为“a=王力”。
int a;就是指定了一间空房子,代号为a,地址是系统自动分配的,用&a可以查看a这间房的地址(比如是1001)。
a=20;就等于让名字为20的人住进来了。这时,就可以用a表示住进的人20(有时也称它为元素),&a就是20所住的房子a的地址1001。
现在又建立了一间房子,但它不能住人的,它里面只能放一张纸条,上面也只能写一个地址!我们可以按照地址找到下一间房子。这间房子的建立方法是int *p;,*代表这是一间不能住人的房子,p是这间房子的代号,这间房子的地址同样也是系统自动分配,可以用&p查看具体的地址(比如是2001)。
由于p内不能住人,就不能p=30,只能住进一个地址,所以只能p=&a,这样a的地址1001就住进了p这间房子。现在我们把p叫做指向a的指针。归纳一下:
p的值=p内纸条上的值,当然是a的地址(1001)啦
&p=p的地址(2001)
*p=p的值对应的房间内所住的人,即1001住的人的名字(20)。
现在又声明了一个变量,int **q,不仅这间房子只能放一张纸条(其地址也是自动分配,假如是3001),而且纸条上的内容(地址)只能指向另一间放纸条的房子(指针)!如q=&p是正确的,q=&a则是错误的(因为a是住人的房子)。归纳一下:
q=里面住的纸条2001
&q=q的地址3001
*q=2001房间内住的人名(当然是一张纸条)1001
**q=纸条(2001)的纸条(1001)房间内的人20。

温馨提示:答案为网友推荐,仅供参考
相似回答