将一个int指针转换为char ptr,反之亦然
问题很简单。 据我了解,GCC认为字符将是字节对齐的,并且在32位环境中对齐4字节对齐。 我也知道C99标准6.3.2.3,它表示在未对齐的指针类型之间进行转换会导致未定义的操作。 C的其他标准对此有何评论? 这里也有许多经验丰富的编码员 – 对此有任何看法将不胜感激。
int *iptr1, *iptr2; char *cptr1, *cptr2; iptr1 = (int *) cptr1; cptr2 = (char *) iptr2;
C只有一个标准(ISO标准),有两个版本(1989年和1999年),还有一些非常小的版本。 所有版本和修订都同意以下内容:
- 所有数据存储器都是字节可寻址的,而字符是字节
- 因此
char*
将能够处理任何数据-
void*
与char*
相同,除了与它之间的转换不需要类型转换
-
- 从
int*
转换为char*
总是有效,收敛回int*
- 将任意
char*
转换为int*
并不能保证正常工作
保证char指针的工作原理是这样的,例如,你可以从内存中的任何地方将整数复制到内存或磁盘中的其他地方,然后返回,这在低级别中是非常有用的。编程,例如图形库。
CPU有big-endian和little-endian,因此结果未定义。 例如,对于转换后的char指针,0x01234567的值可以是0x12或0x67。
你可以尝试做:
iptr1 = atoi(cptr1); // val now = pointed by cptr1 cptr2 = atoi(iptr2); // val now = pointed by iptr2
这在DevCpp中对我有用!