我想详细解释一下为%d
使用%p
和printing pointer
类型之间的区别。
阿尔索
为什么%p
返回十六进制?
当%d
和%p
返回不同的值时,会出现什么情况?
数据类型是否只表示用户想要输出的方式,或者它也与内存位置有关?
最佳答案
要使程序定义良好,格式说明符必须与参数的类型匹配。因此,您可以使用%p
而不是%d
来打印指针。(后者可能在某些架构上工作,但在技术上是undefined behaviour)
不能自由交换%d
和%p
的主要原因是ints
和指针不必具有相同的大小。
指针的打印格式是特定于体系结构的(指针可以有不同的大小,或者实际上不同的structure)。然而,以十六进制形式转录内存地址是很常见的,所以%p
通常就是这样做的。