uintptr_t
和其他有用的类型
<inttypes.h> 提供的其他有用类型包括大小足以包含一个指针的带符号整数类型和无符号整数类型。这些类型以 intptr_t
和 uintptr_t
形式提供。此外,还会将 intmax_t
和 uintmax_t
分别定义为可用的最长(以位为单位)带符号整数类型和无符号整数类型。
选用 uintptr_t
类型作为指针的整数类型比使用基本类型(如 unsigned long
)要好。尽管在 ILP32 和 LP64 数据模型中,类型 unsigned long
与指针的长度相同,但如果使用 uintptr_t
,则只需在使用其他数据模型时更改 uintptr_t
的定义即可。这会使其可移植到许多其他系统中,并且还可以在 C 中更为清楚地表达意图。
需要执行地址运算时,intptr_t
和 uintptr_t
类型对于强制转换指针非常有用。因此,应使用这些类型,而不是使用 long
或 unsigned long
类型。
使用 uintptr_t
进行强制类型转换通常比使用 intptr_t
安全,在进行比较时尤为安全。