使用printf(%x)为什么指针的值不同?

#include  int main(void) { int *ptr; printf("The Hex value of ptr is 0x%x",ptr); printf("The pointer value of ptr is %p",ptr); } 

输出有点不同,我不知道为什么

 The Hex value of ptr is 0x24a77950 The pointer value of ptr is 0x7fff24a77950 

它显示ptr的值是hex整数,但hex输出缺少部分7fff

这是printf格式问题还是别的什么?

%x将指针强制转换为无符号整数(32位长度)。 在64位机器上,指针的长度为8字节(64位)。

使用%p打印时会打印整个指针,其大小为64位。 但是当使用%x打印时,只打印低32位。 因此,使用%p打印指针总是安全的。

您可以添加额外的2行,如下所示,并validation:

 printf("size of unsigned int is %lu\n", sizeof(unsigned int)); printf("size of pointer is %lu\n", sizeof(int *)); 

在具有64位操作系统的64位计算机上,这应该分别为4和8。

查看已回答的两个类似问题: 问题1和问题2