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

时间:2012-07-16 08:09:27

标签: c pointers printf

#include <stdio.h>
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的值是十六进制整数,但十六进制输出缺少部分7fff

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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

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

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