gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:05:19 26 4
gpt4 key购买 nike

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

最佳答案

%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

关于c - 为什么使用 printf(%x) 时指针的值不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11500347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com