例如,我将指向 int
的指针转换为指向 char
的指针:
int originalVar = 1;
char *arr = (char *)&originalVar;
然后我将其转换回来(也许我将 arr
传递给另一个函数):
int *pOriginal = (int *)arr;
这是否违反规则?或者这里有任何未定义的行为?
--
其实我的疑惑在于理解C标准中的“有效类型”
arr
指向的对象是否总是将int
视为其有效类型?
(即使arr
被传递给另一个函数?)
最佳答案
这有效并且定义良好,因为原始指针的对齐方式将与 int 匹配。
只有将 char* 转换为 int* 才可能是对齐要求。某些体系结构要求 int 在 4 字节边界上对齐(即指针的最后两个二进制数字为 0)。 char* 通常没有这个限制。
但是,由于它以 int* 开头,并且 int* -> char* 从来都不是问题,因此这不会导致任何问题。
关于c - 转换为 char* 然后转换回原始类型是否会破坏严格别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29981787/