是否可以将& my_boost_array_variable [2]传递给期望空* *的C函数?

时间:2012-11-29 09:58:46

标签: c++ c arrays boost parameter-passing

我有两个变量:

boost::array my_boost_array_variable_1<float, 3>;
boost::array my_boost_array_variable_2<float, 3>;

现在我想用以下签名调用C函数:

int MPI_Allreduce ( void *sendbuf, void *recvbuf, ...);

我想将my_boost_array_variable_1my_boost_array_variable_2的特定元素的地址作为MPI_Allreduce的第一个和第二个参数传递:

MPI_Allreduce(&my_boost_array_variable_1[2],
              &my_boost_array_variable_2[2], ...

或者我应该这样做:

MPI_Allreduce(my_boost_array_variable_1.c_array() + 2,
              my_boost_array_variable_2.c_array() + 2, ...

更新: C函数需要一个连续的数据块,从void * sendbuf开始。这方面的问题是这两个呼叫在这方面是否正确。 &amp; my_boost_array_variable_1 [2]是否指向与my_boost_array_variable_1.c_array()+ 2相同的位置?这些电话是否相同?

3 个答案:

答案 0 :(得分:2)

首先,对我来说,第二个更清楚。但实际上我认为他们是平等的。

答案 1 :(得分:1)

根据http://www.boost.org/doc/libs/1_52_0/doc/html/boost/array.html NEITHER版本将抛出。 (无法用我的小名声评论: - ))

答案 2 :(得分:0)

系统依赖于哪一个更快,你可以看到你自己的汇编代码。

第一种方法更安全,因为如果你试图解决不合法的索引,它会引发异常。

第二种方法通常更快,因为您只有一次取消引用。