Solaris(64 位)开发者指南

uintptr_t 和其他有用的类型

<inttypes.h> 提供的其他有用类型包括大小足以包含一个指针的带符号整数类型和无符号整数类型。这些类型以 intptr_tuintptr_t 形式提供。此外,还会将 intmax_tuintmax_t 分别定义为可用的最长(以位为单位)带符号整数类型和无符号整数类型。

选用 uintptr_t 类型作为指针的整数类型比使用基本类型(如 unsigned long)要好。尽管在 ILP32 和 LP64 数据模型中,类型 unsigned long 与指针的长度相同,但如果使用 uintptr_t,则只需在使用其他数据模型时更改 uintptr_t 的定义即可。这会使其可移植到许多其他系统中,并且还可以在 C 中更为清楚地表达意图。

需要执行地址运算时,intptr_tuintptr_t 类型对于强制转换指针非常有用。因此,应使用这些类型,而不是使用 longunsigned long 类型。


注 –

使用 uintptr_t 进行强制类型转换通常比使用 intptr_t 安全,在进行比较时尤为安全。