将自定义大小的多维数组传递给函数

时间:2013-03-18 13:16:58

标签: c++ arrays multidimensional-array

我有已知x尺寸(5)的数组,y取自变量,所以数组是这样的 - array[5][y];

现在我很难将它传递给函数,我不会编辑它,只是从中读取数据。

我想做这样的事情:

void someFunction(double **array)

但我得到

convert error: cannot convert `double (*)[((unsigned int)((int)n))]' to `double**' for argument `2' to `void findMax(int, double**, int)'|

2 个答案:

答案 0 :(得分:1)

对于数组[5] [x]

很遗憾,您无法为double[5][]这样的数组定义类型。您只能省略多维数组的第一维,而不是最后一维。

对于数组[x] [5]

你应该选择void someFunction(double array[][5], int size)。 然后使用for (int i = 0; i < size; i++)循环使用元素。

示例:

void someFunction(double array[][5], int size) {
    for (int k = 0; i < size; i++)
        for (int i = 0; i < 5; i++)
            std::cout << array[k][i] << std::endl;
}


double a[10][5];
// populate data
someFunction(a, 10);

通常最好使用std::容器而不是原始C数组。

例如,请查看std::vector

答案 1 :(得分:0)

如果您不使用STL,也可以这样做:

void someFunction(double **mat, const int Xsize, const int Ysize )
{
    for(unsigned int i = 0 ; i < Xsize ; ++i)
    {
        for(unsigned int j = 0 ; j < Ysize ; ++j)
        {
            std::cout << ((double *)mat + Ysize * i)[j] << "  " ;
        }
        std::cout << std::endl;
    }

    return ;
}

并调用这样的函数:

int main(int argc, char** argv)
{
    double matrice[2][3] = {{1,2,3},{4,5,6}};
    someFunction( (double**)matrice, 2, 3 );
    return 1;
}