通常使用此代码我们应该得到指针的相同地址:
如果我们通常有这样的代码,i
和&i
指向相同的地址
int *i=NULL;
int k=5;
i=&k;
printf("%p %p",&i,i);
这是printf
的结果(只有最后一位数字不同):0x7fff5fbff8b8 0x7fff5fbff8b4
任何人都可以解释一下为什么?
答案 0 :(得分:11)
因为它们不一样。 i
是一个包含变量k
地址的指针,&i
是一个包含变量i
地址的指针。
答案 1 :(得分:3)
i
是指向整数的指针。 i
的值是地址(k
的地址)。
&i
是i
的地址。
您只输出两个不同的地址。
你可以这样做:
#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
的地址。