C 中指针大小的 unsigned int

Sas*_*sha 1 c

在 C 中,以下之一是否保证在所有设备上unsigned///与指针unsigned short的大小相同?unsigned longunsigned long longvoid *

P__*_*J__ 8

不,没有这样的保证。

但是,如果您想将指针保存为整数,则可以使用称为uintptr_t(或intptr_t) 的特殊类型,它保证保存任何转换为​​整数的指针。

7.18.1.4 能够保存对象指针的整数类型

  1. 以下类型指定一个有符号整数类型,其属性是任何有效的 void 指针都可以转换为该类型,然后转换回 void 指针,并且结果将与原始指针进行比较: 以下类型指定一个无符号 intptr_t整数具有以下属性的属性:任何有效的 void 指针都可以转换为该类型,然后转换回 void 指针,结果将与原始指针进行比较: uintptr_t

这些类型是可选的。

更新:

在指针偏移量的计算中使用它,我认为很高兴知道它不必在内部某处调整大小才能用作指针的偏移量

为此,您有另一种类型:ptrdiff_t

当两个指针相减时,两个指针都应指向同一个数组对象的元素,或者指向数组对象最后一个元素之后的一个;结果是两个数组元素的下标之差。结果的大小是实现定义的,其类型(有符号整数类型)ptrdiff_t<stddef.h> 标头中定义。