【发布时间】:2011-05-16 12:25:53
【问题描述】:
问题很简单。据我了解,GCC 认为在 32 位环境中 chars 将是字节对齐的,ints 是 4 字节对齐的。我也知道 C99 标准 6.3.2.3,它说在未对齐的指针类型之间进行转换会导致未定义的操作。 C 的其他标准对此有何评论?这里也有许多经验丰富的编码人员 - 对此的任何看法将不胜感激。
int *iptr1, *iptr2;
char *cptr1, *cptr2;
iptr1 = (int *) cptr1;
cptr2 = (char *) iptr2;
【问题讨论】:
-
从 int* 转换为 char* 总是有效的。反过来,在某些 CPU 上它可以工作,而在其他 CPU 上则不行。
-
如果您有兴趣,以下检查一个特定案例:stackoverflow.com/q/25994127/2436175
标签: c pointers types casting c89