我有一些 C99 代码,我需要将 2n double 数组转换为 n double 复数数组。我这样做
static void real_to_complex(const double *r, size_t n, double complex *z)
{
size_t i;
for (i=0 ; i<n ; i++)
z[i] = r[2*i] + r[2*i + 1]*I;
}
这是代码的性能关键部分,我真的不想创建一个新的存储区域 z 并且有复制的费用,而是我想用这些函数调用替换
z = (double complex*)r;
有没有办法做到这一点并保持符合标准?我知道双复数保证与两个双精度数组具有相同的布局——也许我可以通过编译器检查这个布局是(真实的,想象的)还是(想象的,真实的)?