什么是 uintptr_t
它可以用来做什么?
原文由 dimba 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先,在提出问题时, uintptr_t
不在 C++ 中。它在 C99 中的 <stdint.h>
中,作为可选类型。许多 C++03 编译器确实提供了该文件。它也在 C++11 中,在 <cstdint>
中,它又是可选的,它指的是 C99 的定义。
在 C99 中,它被定义为“一个无符号整数类型,其属性是任何指向 void 的有效指针都可以转换为该类型,然后再转换回指向 void 的指针,并且结果将与原始指针进行比较”。
把它理解为它所说的。它没有说任何关于大小的事情。
uintptr_t
可能与 void*
的大小相同。它可能更大。可以想象它可能会更小,尽管这样的 C++ 实现方法有悖常理。例如,在 void*
是 32 位,但只使用 24 位虚拟地址空间的一些假设平台上,您可以有一个 24 位 uintptr_t
满足要求。我不知道为什么实现会这样做,但标准允许这样做。
原文由 Steve Jessop 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
uintptr_t
是无符号整数类型,可以存储 数据指针 (是否可以存放函数指针未指定) 。这通常意味着它与指针的大小相同。它在 C++11 和更高版本的标准中可选地定义。
想要一个可以保存体系结构指针类型的整数类型的一个常见原因是对指针执行特定于整数的操作,或者通过将指针的类型提供为整数“句柄”来模糊指针的类型。