0
#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 格式问题还是其他问题?

4

1 回答 1

5

%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。

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

于 2012-07-16T14:42:34.873 回答