将C ++复杂数组传递给C语言

我必须将复杂数据传递给C ++中的C函数。 在C ++中,数据自然存储在std::vector c 。 C函数期望数据为double, double a[]的数组,使得a [0] = Re(c [0]),a [1] = Im(c [0]),a [2] = Re (c [1])等

传递此类数据的最佳安全方法是什么? 像铸造一样

 (double*) (&c[0]) 

惹麻烦?

很抱歉,如果这是重复的,我只能找到有关将C ++复合体传递给C99复合体的相关问题的信息。

C ++ 0x标准花了很长时间来保证这样的转换能够起作用(第26.4节):

此外,如果a是cv std::complex*类型的表达式,并且表达式a[i]为整数表达式i定义良好,则:

reinterpret_cast(a)[2*i]应指定a[i]的实部,并且

reinterpret_cast(a)[2*i + 1]应指定a[i]的虚部。

和(§23.3.6):

向量的元素是连续存储的,这意味着如果vvector ,其中T是除bool之外的某种类型,则它遵循所有0 <= n < v.size()的标识&v[n] == &v[0] + n 0 <= n < v.size()

普遍的C ++ 03标准(尽管矢量布局是)保证了复数值的布局,但是我会惊讶地发现它没有实现的实现。