通常使用这段代码我们应该得到相同的指针地址:如果我们正常有这样的代码,i并且&i指向相同的地址
int *i=NULL;
int k=5;
i=&k;
printf("%p %p",&i,i);
这是printf(只有最后一位数字不同)的结果:0x7fff5fbff8b8 0x7fff5fbff8b4
谁能解释一下为什么?
因为他们不一样。i是一个包含变量地址的指针k,&i是一个包含变量地址的指针i。
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' 的地址。