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

时间:2011-02-16 17:47:10

标签: c++ c

我必须将复杂数据从C ++传递给C函数。在C ++中,数据自然存储在一个 std::vector<std::complex> 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复合体的相关问题的信息。

1 个答案:

答案 0 :(得分:18)

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

  

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

     

- reinterpret_cast<cv T*>(a)[2*i]应指定a[i]的实部和

     

- reinterpret_cast<cv T*>(a)[2*i + 1]应指定a[i]的虚部。

和(§23.3.6):

  

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

复杂值的布局是由现行的C ++ 03标准保证(虽然矢量布局是),但我会惊讶地发现它不能保持的实现