#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格式问题还是别的什么?
答案 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 1和question 2