C ++中的指针相同的变量有两个不同的地址

时间:2013-09-16 14:35:07

标签: c++ pointers

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

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

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

任何人都可以解释一下为什么?

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分: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的地址。