【发布时间】:2011-07-09 16:21:17
【问题描述】:
我在读一本 C 书。为了打印出变量的内存地址,本书有时会使用:
printf("%u\n",&n);
有时,作者写道:
printf("%d\n",&n);
结果总是一样的,但我不明白两者之间的区别(我知道 %u 表示无符号)。
谁能详细说明一下?
非常感谢。
【问题讨论】:
-
我会使用
printf("%x\n",&n)来打印地址的十六进制表示。但这只是我。 -
扔掉这本书——你永远不应该使用
%u或%d来打印地址,因为地址可能比int有更多的位——使用%p,或者失败了%#llx。 -
您还应该转换地址以匹配您选择的说明符的类型。
printf不能进行任何自动转换,因为参数没有原型参数。使用%p即为(void *),使用%#llx即为(unsigned long long),等等