1

通常使用这段代码我们应该得到相同的指针地址:如果我们正常有这样的代码,i并且&i指向相同的地址

int *i=NULL;
int k=5;
i=&k;
printf("%p %p",&i,i);

这是printf(只有最后一位数字不同)的结果:0x7fff5fbff8b8 0x7fff5fbff8b4

谁能解释一下为什么?

4

2 回答 2

11

因为他们不一样。i是一个包含变量地址的指针k&i是一个包含变量地址的指针i

于 2013-09-16T14:37:35.607 回答
3

i是一个指向整数的指针。i的值是一个地址(的地址k)。

&ii的地址。

您只需输出两个不同的地址。

你可以这样做:

#include <cstdio>

int main()
{
   int *i=NULL;
   int k=5;
   i=&k;
   int** j = &i;
   printf("%p %p %p",&i,i,j);
}

你可以得到输出:

[wolf@Targaryen]:~$ r
0xbfc8a1a8 0xbfc8a1a4 0xbfc8a1a8

看到第一个地址和第三个一样。因为j' 的值是i' 的地址。

于 2013-09-16T15:19:12.823 回答