#include <stdio.h>
#include <unistd.h>
int staticVar = 0;
int main()
{
staticVar += 1;
sleep(10);
printf("Address: %x\nValue: %d\n", &staticVar, staticVar);
return 0;
}
我很困惑这个程序打印出变量“staticVar”的地址。从播放代码我注意到,如果你将printf语句更改为此...
printf("Address: %x\nValue: %d\n", staticVar, staticVar);
然后变量“staticVar”的值打印在“地址”位置。
一些快速的研究让我明白了“&amp;”的加入意味着引用了变量“staticVar”,并且printf语句中的“%x”以十六进制打印出值。即使有这些信息,我仍然感到困惑,为什么这样做。
我还在网上看到,您可以使用此行打印出地址到某个变量...
printf("Address: %p\n", (void*) &staticVar);
这样做是否有优势?
我可能只需要解释一下“&amp;”符号有效地做了。
答案 0 :(得分:2)
首先,您应该熟悉指针的概念。幸运的是,有很多很棒的参考文献like this(前5个部分是重要的)。
做了一些指针阅读后,底线是&amp;是C中的运算符,它返回它前面的变量的地址。(它实际上可以有两种用途,具体取决于它使用的上下文,另一种是按位AND运算符,但你不应该担心直到你需要使用它。)
此外,您应始终使用%p打印指针。原因是它使您的代码更加portable to different operating systems。
printf("Address: %p\n", (void*) &staticVar);
这段代码可以工作,但我不会转换为void指针,因为这种类型转换是不必要的,并且使代码的可读性降低。试试这个。
printf("Address: %p\n", &staticVar);
答案 1 :(得分:0)
在此特定上下文符号'&amp;'中有效地用它后面的任何变量替换变量的地址。