将可变长度的2D数组传递给函数

Ram*_*man 3 c arrays function

如果我动态分配2D数组(malloc it),

int r,c;
scanf("%d%d",&r,&c);
int **arr = (int **)malloc(r * sizeof(int *));

for (i=0; i<r; i++)
     arr[i] = (int *)malloc(c * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

然后将它传递给一个函数,其原型是:

fun(int **arr,int r,int c)
Run Code Online (Sandbox Code Playgroud)

没有问题.但是当我声明像VLA这样的2D数组时

int r,c;
scanf("%d%d",&r,&c);
int arr2[r][c];
Run Code Online (Sandbox Code Playgroud)

当我尝试将它传递给同一个函数时,它给了我一个错误.为什么会这样?有没有什么方法可以将第二个2D数组(arr2)传递给函数?

我知道有很多类似的问题,但我找不到解决同一问题的问题.

R S*_*ahu 7

1D阵列衰减到指针.但是,2D数组不会衰减为指向指针的指针.

当你有

int arr2[r][c];
Run Code Online (Sandbox Code Playgroud)

并且您想使用它来调用函数,该函数需要声明为:

void fun(int r, int c, int arr[][c]);
Run Code Online (Sandbox Code Playgroud)

并称之为

fun(r, c, arr2);
Run Code Online (Sandbox Code Playgroud)

  • `arr`,`fun`中的参数,类型为`int(*)[c]`,而不是`int**`. (4认同)