如果我动态分配2D数组(malloc),
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));
然后将其传递给原型为:
的函数fun(int **arr,int r,int c)
没有问题。但是当我声明像VLA这样的2D数组时,即
int r,c;
scanf("%d%d",&r,&c);
int arr2[r][c];
当我尝试将其传递给相同的函数时,它给出了一个错误。为什么会这样? 有没有什么方法可以将第二个2D数组(arr2)传递给函数?
我知道有很多类似的问题,但我找不到解决相同问题的问题。
答案 0 :(得分:6)
1D数组衰减到指针。但是,2D数组不会衰减为指向指针的指针。
当你有
时int arr2[r][c];
并且您想使用它来调用函数,该函数需要声明为:
void fun(int r, int c, int arr[][c]);
并用
调用它fun(r, c, arr2);