我写这个是为了测试我对指针的知识:
int main (){
int seven = 7;
int* p = &seven;
int** pp = &p;
int*** ppp = &pp;
printf("%d %d %d %d\n", *ppp, &pp, &p, &seven);
}
但是,在输出中,我得到:
1363848032 1363848024 1363848032 1363848044
这对我来说不重要,因为
*ppp == &p
我正期待着
*ppp == &pp
。为什么会这样?&pp
是否跟随指向p
的指针? 最佳答案
我将尝试用以下模式解释问题:
ppp pp p seven <---- variable names
+----+ +----+ +----+ +----+
| 30 | | 20 | | 10 | | 7 | <---- memory contents
+----+ +----+ +----+ +----+
40 30 20 10 <---- memory addresses
在上图中,这些框表示存储变量的各个内存槽。每一个盒子下面的数字就是内存中那个地方的地址。
现在指针实际上只是一个变量,它的值恰好是另一个变量的内存地址。
所以当你说
*ppp
时,你要求变量的值,在地址30
处,等于20
,这是p
的地址。所以你得到*ppp == &p
和ppp == &pp
。关于c - 为什么该程序具有意外的指针值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32980232/