什么是intptr_t,它是一个整数或指针的types?

它在/usr/include/stdint.h定义:

 typedef long int intptr_t; 

它应该是一个整数或指针的types?

它是一个有符号整数类型,足够容纳一个指针。

它是一个有符号整数类型,保证可以容纳一个void*类型。

为什么还有[u]intptr_t ? 因为:

任何有效的指向void的指针都可以转换为intptr_t或者uintptr_t并且返回值不变。 C标准保证指向void的指针可以被转换为指向任何对象类型的指针或者返回,并且结果必须与原始指针相等。 因此,在支持uintptr_t实现中允许直接从char *指针uintptr_tuintptr_t