我知道它是一个整数类型,可以在不丢失数据的情况下转换为指针/从指针转换,但我为什么要这样做呢?与 void*
用于保存指针和 THE_REAL_TYPE*
用于指针运算相比,整数类型有什么优势?
编辑
标记为“已经被问到”的问题没有回答这个问题。问题是如果使用 intptr_t
作为 void*
的一般替代品是个好主意,而且那里的答案似乎是“不要使用 intptr_t”,所以我的问题仍然是有效: intptr_t
的一个好的用例是什么?
原文由 Baruch 发布,翻译遵循 CC BY-SA 4.0 许可协议
主要原因是,您不能对
void *
执行按位运算,但您可以对intptr_t
执行相同操作。在许多情况下,您需要对地址执行按位运算,您可以使用
intptr_t
。但是,对于按位运算,最好的方法是使用
unsigned
对应的uintptr_t
。正如 @chux 在 另一个答案 中提到的,指针比较是另一个重要方面。
此外,FWIW,根据
C11
标准,§7.20.1.4,