功能定义为:
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){
..}
答案 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
替换为您需要支持的实际尺寸。