我写这个是为了测试我对指针的知识:

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 == &pppp == &pp

关于c - 为什么该程序具有意外的指针值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32980232/

10-11 02:35