#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);
}
Run Code Online (Sandbox Code Playgroud)
和输出有些不同,我不知道为什么
The Hex value of ptr is 0x24a77950
The pointer value of ptr is 0x7fff24a77950
Run Code Online (Sandbox Code Playgroud)
它显示ptr的值是一个十六进制整数,但是十六进制输出缺少part 7fff。
这是printf格式问题还是其他?
%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 *));
Run Code Online (Sandbox Code Playgroud)
在具有64位操作系统的64位计算机上,这应该分别给您4和8。
| 归档时间: |
|
| 查看次数: |
1172 次 |
| 最近记录: |