De acordo com o Padrão C :
Cada tipo complexo tem os mesmos requisitos de representação e alinhamento de um tipo de matriz contendo exatamente dois elementos do tipo real correspondente; o primeiro elemento é igual à parte real e o segundo elemento à parte imaginária do número complexo.
Dessa forma, é possível lançar com segurança a _Complex float *
em a float *
e então acessar os componentes reais/imaginários usando o float *
? Ou isso ainda violaria tecnicamente o aliasing estrito e, portanto, invocaria um comportamento indefinido?
_Complex float c;
((float *)&c)[0] = 1;
((float *)&c)[1] = 2;
c; // 1 + 2i