通常使用这段代码我们应该得到相同的指针地址:如果我们正常有这样的代码,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
' 的地址。