我对 C 规范(主要是 C99)的最大努力使我认为void *
在以下任何类型之间进行强制转换(或隐式转换,其中隐式转换行为适用)是有效的:
void *
, char *
, signed char *
,unsigned char *
我希望这不会触发未定义的行为,并且保证这些指针具有相同的底层表示。
因此,应该可以采用这四种类型中的任何一种类型的指针,该指针已经指向可以合法取消引用的地址,类型转换和/或将其分配给三个 char 类型指针之一,并取消引用它以访问相同的内存,唯一的区别是您的代码是否将该位置的数据视为char
、signed char
或unsigned char
.
它是否正确?void *
是否存在任何不正确的 C 标准版本(预标准化 C 中缺少类型)?
PS我相信这个问题是在许多其他问题中零碎回答的,但我从未见过一个明确的答案,明确说明/确认。