根据C 标准:
每个复数类型都具有与包含相应实数类型的两个元素的数组类型相同的表示和对齐要求;第一个元素等于复数的实部,第二个元素等于复数的虚部。
因此,是否可以安全地将 a 转换_Complex float *
为 a float *
,然后使用 访问实部/虚部float *
?或者这在技术上是否仍违反严格别名,从而引发未定义的行为?
_Complex float c;
((float *)&c)[0] = 1;
((float *)&c)[1] = 2;
c; // 1 + 2i