【发布时间】:2017-09-04 01:15:58
【问题描述】:
有人可以解释第二行的输出吗?
int x=10;
printf("%d\n",x);
printf("%p\n",x);
printf("%p\n",&x);
输出:
10
0000000a
006aff0c
【问题讨论】:
-
嗯,使用不匹配的
printf()转换说明符和参数是未定义的行为;也就是说,0000000a是十进制10的十六进制表示。 -
使用
%p打印整数并不能保证工作(并且,在不常见的情况下,例如 64 位编程,几乎可以保证不能工作),但令人惊讶的是 10 (base 10) 输出为 0x0a (base 16)? -
看起来 %p 总是将通过他的任何东西转换成十六进制 @DavidBowling
-
@ToufiqueImam——不完全是;
%p转换说明符打印指针 in an implementation-defined way 的值。这可能是也可能不是十六进制表示。请注意,在使用%p打印之前,必须将指针转换为(void *),以避免未定义的行为;例如,printf("%p\n",(void *) &x);