我想详细解释一下为%d使用%pprinting pointer类型之间的区别。
阿尔索
为什么%p返回十六进制?
%d%p返回不同的值时,会出现什么情况?
数据类型是否只表示用户想要输出的方式,或者它也与内存位置有关?

最佳答案

要使程序定义良好,格式说明符必须与参数的类型匹配。因此,您可以使用%p而不是%d来打印指针。(后者可能在某些架构上工作,但在技术上是undefined behaviour
不能自由交换%d%p的主要原因是ints和指针不必具有相同的大小。
指针的打印格式是特定于体系结构的(指针可以有不同的大小,或者实际上不同的structure)。然而,以十六进制形式转录内存地址是很常见的,所以%p通常就是这样做的。

07-24 13:30