Lea*_*ver 15 c types pointers casting c89
问题很简单.据我了解,GCC坚持认为字符将是字节对齐的,并且在32位环境中对齐4字节对齐.我也知道C99标准6.3.2.3,它表示在未对齐的指针类型之间进行转换会导致未定义的操作.C的其他标准对此有何评论?这里也有许多经验丰富的编码员 - 对此有任何看法将不胜感激.
int *iptr1, *iptr2;
char *cptr1, *cptr2;
iptr1 = (int *) cptr1;
cptr2 = (char *) iptr2;
Run Code Online (Sandbox Code Playgroud)
小智 13
C只有一个标准(ISO标准),有两个版本(1989年和1999年),还有一些非常小的版本.所有版本和修订都同意以下内容:
char*将能够处理任何数据
void*与char*转换相同,除了转换之外不需要类型转换int*为char*始终有效,转换回来int*char*转换int*为无法保证工作保证char指针的工作原理是这样的,例如,你可以从内存中的任何地方将整数复制到内存或磁盘中的其他地方,然后返回,这在低级别中是非常有用的.编程,例如图形库.