在C语言中可以用二维数组作为实参或者形参。
1、函数中用二维数组作为形参,函数声明中可以指定所有维数的大小,也可以省略第1维的维数如:
void f(int array[3][10]) //正确void f(int array[][10]) //正确
上面的两种二维数组形参表示都是正确的。
2、函数中用二维数组作为形参,不能把第2维或者更高维的大小省略,如下面的定义是不合法的:
void f(int array[][]) //错误因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能只指定一维而不指定第二维,下面写法是错误的:
void f(int array[3][]) //错误3、二维数组作为实参传递时,必须保证实参第2维的维数与形参第2维的维数相同,因为必须要保证形参和实参的数据类型一致。比如定义如下函数:
void f(int array[][10])可以将如下数组传递给函数f。
int a[2][10] = {1,2,3,4}int b[4][10] = {1}
C语言中指针做函数参数传递二维数组有两种基本方法:
1、传递“数组指针”
#include <stdio.h>
void output( int (*pa)[3], int n )//这个函数只能输出n行3列的二维数组
{
int i,j
for( i=0i<ni++ ){
for( j=0j<3j++ )
printf("%d ", pa[i][j] )
printf("\n")
}
}
void main()
{
int a[2][3]={
{1,2,3},
{4,5,6}
}
output(a,2)
}
2、传递“指针数组”
先将二维数组的行指针存储到一个指针数组中,再将指针数组传递到子函数中去。
#include <stdio.h>
void output( int *pa[], int row,int col ) //这个函数更通用,但调用前,要做好准备工作。
{
int i,j
for( i=0i<rowi++ ){
for( j=0j<colj++ )
printf("%d ", pa[i][j] )
printf("\n")
}
}
void main()
{
int a[2][3]={
{1,2,3},
{4,5,6}
}
int i
int *pa[2]
for( i=0i<2i++ )
pa[i]=a[i]
output(pa, 2, 3)
}
函数原型 type fun (type (name*)[size])\x0d\x0a \x0d\x0atype是你要定义的类型,fun是函数名,name是在函数中二维数组的名字,\x0d\x0asize是二维数组第2维的长度。\x0d\x0a这样调用这个函数只需要把二维数组函数名传递就可以了。