-
梦里花落0921
uintptr_t能够存储指针的无符号整数类型。这通常意味着它与指针的大小相同。它是在C+11和更高版本的标准中可选定义的。想要一个能够保存架构指针类型的整数类型的一个常见原因是对指针执行特定于整数的操作,或者通过提供一个整数“句柄”来模糊指针的类型。
-
慕斯王
第一件事,在提出问题的时候,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满足了要求。我不知道为什么一个实现会这样做,但标准允许这样做。
-
月关宝盒
它是一个与指针大小完全相同的无符号整数类型。每当您需要用指针做一些不寻常的事情时,例如,倒置所有的位(不要问为什么),就把它转换到uintptr_t并将其作为通常的整数进行操作,然后进行回滚。