int *p=4;**q; q=&p; 中&p和p分别代表什么?**q怎么理解?

int *p=4;**q; q=&p; 中&p和p分别代表什么?
int**q是怎么一回事?
q=&p;为什么能这样赋值?

在C语言中指针变量也是一个变量,它存在于内存之中,跟普通的int变量没有什么区别。
但是指针变量跟int变量的访问方式有一点区别。
当你访问int变量时,是直接取变量所占内存中的值。
而当你使用*p访问指针变量时,是先取p所占内存中的值,把取出的值当作一个地址,然后再取出新地址的值作为最终值。
如下图,假如p是int型的,那值就等于p。假如p是指针型的,值就等于x。
(图画的比较简单)
| |
------------
| |
| x |
| |<-|
------------ |
| |---
| p |
| |
------------
| |
int **q;这句话声明了一个指向指针变量的指针变量,见下图,其中q是双重指针变量,p是指针变量,z就是具体数据了。访问过程请自己推一下吧(用上面的方法)。
q=&p;其中&p表示求出p这个指针变量的在内存中的地址,而q=&p就表示把p的地址作为q这个双重指针变量的值。
| |
------------
| |
| z |
| |<-|
------------ |
| |---
| p |
| |<-|
------------ |
| |---
| q |
| |
------------
| |

我可怜的图啊,为什么把中间的空格都给我删除了?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-09-20
&p表示取p的地址

p表示取变量p的值

int **q表示定义一个二维指针,也就是指向指针的指针变量

q=&p 表示q指向另一个指针变量p
第2个回答  2008-09-20
&是取一个变量的地址运算符,*这个符号表示“指向”如果定义一个指针变量A,那么*A表示A指向的变量。所以,在你的题目中,int *P是说明定义一个指针变量,在定义一个指向指针的变量,就是q。在C语言里就得这么写:**q,说明q指向P,而P指向4,所以**q==4.p==4,因为他们都指向存储4的地址。还不明白我们可以深一步探讨。
第3个回答  2008-09-20
int*p=4; 那么p 的类型就是 int * ,值为4。
**q; q没有申明。有问题。如果一定要说,**q的类型是空,
也就是void。当然这个不大可能。void **q;比较合理。
q=&p; q的类型是void**,而&p类型是 指向(int*)的指针,
也就是int**

变量的声明永远是对称的就是说:int *p=4;
p的类型就是int *
*p的类型就是int.
&相当于解引用的逆向操作。*(&p)=p;
相似回答