打印变量(或指针)的内存位置

yay*_*zis 2 c variables pointers memory-address

我想打印存储变量的位置.我谷歌它,我发现了这个:

int *p;
printf("memory location of ptr: %p\n",  (void *)p);
Run Code Online (Sandbox Code Playgroud)

如果我写这个,是不是?

printf("memory location of ptr: %p\n",  &p);
Run Code Online (Sandbox Code Playgroud)

我编译它,我没有得到任何错误或警告,但如果我把它们都放在程序中,这两个语句不会返回相同的值.

Som*_*ude 7

让我们说你有这些声明:

int i;
int *p = &i;
Run Code Online (Sandbox Code Playgroud)

它在内存中看起来像这样:

+---+     +---+
| p | --> | i |
+---+     +---+

如果你然后使用&p你得到一个指针p,所以你有这个:

+----+     +---+     +---+
| &p | --> | p | --> | i |
+----+     +---+     +---+

所以值p是地址i,而值&p是地址p.这就是为什么你得到不同的价值观.