关于C语言的二维数组作为函数参数的问题?
再有一个函数设为mini,需要二维数组作为参数,那么此时函数参数怎么写?
如果写void mini(int a[][])会报错说第二个维度要定义,
写void mini(int a[][N])说[Error] array bound is not an integer constant before ']' token,
写void mini(int *a[])说[Error] expected ',' or '...' before 'a',
那我到底该怎么办? 展开
所谓二维数组,实际上是指向数组的指针,比如:
int n=2,m=3;
int arr[n][m];
实际上相当于:
int n=2,m=3;
int (*arr)[m];
所以,传递二维数组作为参数,实际上就是传递了一个指针。
将形参的类型定义成int*,再在函数内部转换回指向数组的指针就行了,比如:
void f(int *p,int row,int column)
{
int (*arr)[column]=(int (*)[column])p;
//使用二维数组arr
}
这样传递参数:
int n=5,m=6;
int arr[n][m];
f((int*)arr,n,m);
下面是一个例子:
#include <stdio.h>
void f(int *p,int row,int column)
{
int (*arr)[column]=(int (*)[column])p;
for(int i=0;i<row;i++)
{
for(int j=0;j<column-1;j++)
printf("%d,",arr[i][j]);
printf("%d\n",arr[i][column-1]);
}
}
int main()
{
int n;
scanf("%d",&n);
int arr[n][n];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
arr[i][j]=i*n+j;
}
f((int*)arr,n,n);
return 0;
}
这是运行截图:
2021-09-25
一个参数传数组指针,一个参数传数组大小