在c ++

时间:2016-10-21 10:52:39

标签: c++ arrays function reference

功能定义为:

int strip(double *signalstnV){
.
.
return 0;
}

主要功能叫做:

main{
.
.
double signalstnV[iteration][2*range+1][3];
.
.
check = strip(signalstnV);
.
}

我想在strip函数中修改后在main中的next函数中使用该数组。但是在编译过程中我遇到了如下错误

sim.C:在函数'int main(int,char **)'中:

sim.C:54:26:错误:无法将参数'1'的'double()[151] [3]'转换为'double '到'int strip(double *) “

check = strip(signalstnV);

我无法理解。请帮忙。 我的主要目标是从条带函数生成数组,然后在代码中将其传递给其他函数。

当我在另一个函数中使用此数组时

threshold(double * signalstnV)

并使用for循环提取某些特定值,它会给出错误:

invalid types ‘double[int]’ for array subscript 
if (signalstnV[k][j][3] < -0.015){
..}

3 个答案:

答案 0 :(得分:5)

普通的一维数组衰减到指向其第一个值的指针。多维数组仅在其第一维中衰减,衰减为指向数组初始第二维的指针。

如果你希望将一个多维数组“超级衰减”到指向其第一个值的指针,那么就自己动手做:

check = strip(&signalstnV[0][0][0]);

答案 1 :(得分:2)

对于这种情况,或多或少复杂的类型 - 使用类型别名:

//double signalstnV[iteration][2*range+1][3];
using IterationValues = double[iteration];
using IterationRangesValues = IterationValues [2*range+1];
//...

然后,显然是这样称呼:

IterationRangesValues signalstnV[3];
check = strip(signalstnV);

您需要此签名:strip(IterationRangesValues * matrix)或此strip(IterationRangesValues (& matrix)[3])。当然,对于最后一个数组,您也可以使用typedef。

您也可以使用std::array

using IterationValues = std::array<double, iteration>;
using IterationRangesValues = std::array<IterationValues, 2*range+1>;
//...

答案 2 :(得分:0)

要通过引用传递数组,一种方法是:

.fc-button-group {
display: inline-block;
vertical-align: top;
align-content: center;
width: 70px; 
position:relative;
}

然后你可以用各种大小的数组来调用它。

如果您只需支持一种尺寸,请移除template<size_t X, size_t Y, size_t Z> int strip( double(&strip)[X][Y][Z] ) { } 行并将template X Y替换为您需要支持的实际尺寸。