例如,我将指向int
的指针转换为指向char
的指针:
int originalVar = 1;
char *arr = (char *)&originalVar;
然后我把它丢回(也许我将arr
传递给另一个函数):
int *pOriginal = (int *)arr;
它违反了规则吗?或者这里有任何未定义的行为?
-
实际上我的疑问是关于理解"有效类型"在C标准
arr
指向的对象是否始终将int
视为其有效类型?
(即使将arr
传递给另一个函数?)
答案 0 :(得分:2)
这是有效的并且定义良好,因为原始指针的对齐将与int匹配。
只发布一个char *到一个int *可以是对齐要求。某些体系结构要求int在4字节边界上对齐(即,指针的最后两个二进制数字为0)。 char *通常没有这个限制。
但是,因为它以int *开头,而int * - > char *永远不是问题,这不会引起任何问题。