如何将2D动态分配的数组传递给函数?

gol*_*ean 6 c pointers multidimensional-array

我的函数main中有一个在我的C代码中动态分配的二维数组.我需要将这个2D数组传递给一个函数.由于数组的列和行是运行时变量,我知道传递它的一种方法是:

- 传递行和列变量以及指向数组的[0] [0]元素的指针

myfunc(&arr[0][0],rows,cols)
Run Code Online (Sandbox Code Playgroud)

然后在被调用函数中,将其作为'flattened out'一维数组访问,如:

ptr[i*cols+j]
Run Code Online (Sandbox Code Playgroud)

但是我不希望这样做,因为这意味着代码会发生很多变化,因为之前传递给此函数的2D数组是静态分配的,其编码时已知其维度.

那么,我如何将2D数组传递给函数,并且仍然能够将其用作具有2个索引的2D数组,如下所示?

arr[i][j].
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

Arj*_*jit 6

#include <stdio.h>
#include <stdlib.h>
void doit(int ** s , int row , int col ) 
{
    for(int i =0 ; i <col;i++){
            for(int j =0 ; j <col;j++)
                printf("%d ",s[i][j]);
            printf("\n");
    }
}
int main()
{
    int row =10 , col=10;
    int ** c = (int**)malloc(sizeof(int*)*row);
    for(int i =0 ; i <col;i++)
        *(c+i) = (int*)malloc(sizeof(int)*row);
    for(int i =0 ; i <col;i++)
            for(int j =0 ; j <col;j++)
                c[i][j]=i*j;
    doit(c,row,col);
}
Run Code Online (Sandbox Code Playgroud)

希望这是你想要的方式....