如果定义一个二维数组int a[N][N];其中N是scanf得到的输入值。再有一个函数设为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',那我到底该怎么办?
2 回答
holdtom
TA贡献1805条经验 获得超10个赞
所谓二维数组,实际上是指向数组的指针,比如:
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;
}
这是运行截图:
- 2 回答
- 0 关注
- 238 浏览
添加回答
举报
0/150
提交
取消