uintptr_t 数据类型是什么?

新手上路,请多包涵

什么是 uintptr_t 它可以用来做什么?

原文由 dimba 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

uintptr_t 是无符号整数类型,可以存储 数据指针 (是否可以存放函数指针未指定) 。这通常意味着它与指针的大小相同。

它在 C++11 和更高版本的标准中可选地定义。

想要一个可以保存体系结构指针类型的整数类型的一个常见原因是对指针执行特定于整数的操作,或者通过将指针的类型提供为整数“句柄”来模糊指针的类型。

原文由 Drew Dormann 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题