如何将未知大小的二维数组传递给函数

12 c++ pointers function matrix

我想创建类库,一个函数,其参数是一个未知大小的矩阵,用户将创建自己的矩阵并使用自己的大小并将其传递给此函数,对其矩阵进行一些操作,如下所示,将是功能

calculateDeterminantOfTheMatrix( int matrix[][])
{
   some Operations to do on matrix 
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 14

C和C++的内置组件不能很好地支持多维数组.N只有N-1在编译时知道维度时,才能传递-dimension数组:

calculateDeterminantOfTheMatrix( int matrix[][123])
Run Code Online (Sandbox Code Playgroud)

但是,标准库提供std::vector容器,对于多维数组非常有效:在您的情况下,传递vector<vector<int> > &matrix将是在C++中处理任务的正确方法.

int calculateDeterminantOfTheMatrix(vector<vector<int> > &matrix) {
    int res = 0;
    for (int i = 0 ; i != matrix.size() ; i++)
        for(int j = 0 ; j != matrix[i].size() ; j++)
            res += matrix[i][j];
    return res;
}
Run Code Online (Sandbox Code Playgroud)

作为额外的好处,您不需要将矩阵的维度传递给函数:matrix.size()表示第一个维度,并matrix[0].size()表示第二个维度.


小智 6

C 解决方案:

在 C 中,作为函数参数传递时,不能省略数组大小(最左边除外)。

你可以写: int a[]

但不能:int a[][]

例如: int a[][20]

这个约束在这里,因为编译器需要确定访问数组元素的适当偏移量。但是,您可以这样做:

void print_arbitrary_2D_array(void *arr, int y, int x)
{
    /* cast to 2D array type */
    double (*p_arr)[y][x] = (double (*)[y][x]) arr;

    int i, j;

    for (i = 0; i < y; ++i) {
        for (j = 0; j < x; ++j)
            printf(" %lf", (*p_arr)[i][j]);
        putchar('\n');
    }
}

double arr_1[4][3] = {
    { 3.3, 5.8, 2.3 },
    { 9.1, 3.2, 6.1 },
    { 1.2, 7.9, 9.4 },
    { 0.2, 9.5, 2.4 }
};
double arr_2[2][5] = {
    { 3.6, 1.4, 6.7, 0.1, 4.2 },
    { 8.4, 2.3, 5.9, 1.4, 8.3 }
};

print_arbitrary_2D_array(arr_1, 4, 3);
putchar('\n');
print_arbitrary_2D_array(arr_2, 2, 5);
Run Code Online (Sandbox Code Playgroud)