来回指针类型的转换
为值的一种类型的指针可以转换为对不同类型的指针。 但是,结果可能未定义由于对齐要求,并且范围的不同类型存储。 指向对象的指针可重新转换为对类型少或平均强存储对齐的对象的指针,并返回,而不必更改。
为 void 的指针可转换为/从指针转换为任何类型,,不受限制或丢失信息。 如果结果转换回原始类型,原始指针恢复。
如果指针转换为同一类型,但具有不同或额外的限定符的其他指针,新的指针与旧除新的限定符可执行的限制。
指针值也可以转换为整数值。 转换路径取决于指针的大小和集成类型的范围,基于以下规则:
如果指针的大小大于或等于整型范围,指针在转换行为与无符号值,除此之外,无法转换为一个浮动的值。
如果指针小于整型,指针首先转换为相同大小的指针与整型,则将转换为整型。
相反,整型可以转换为指针类型基于以下规则:
如果整型大小相同类似指针类型,将导致整数值将指针 (无符号整数)。
如果整型的大小与指针类型不同的范围,整型首先转换为指针的大小,请使用在表产生的转换路径 从带符号的整数类型的转换 和 从无符号整型转换中。 然后将指针值。
使用值 0 或这样的类型 void * 的表达式转换的整型常数表达式可以将类型转换,分配,或者与任何类型进行比较的指针。 这将产生与同一类型的另一个 null 指针相同的 NULL 指针,但是,此 null 指针与任何指针不与函数或与对象。 除该常数 0 以外的整数可以转换为指针类型,则,但结果是不可移植的。