C语言中如何将二维数组作为函数的参数传递

Python07

C语言中如何将二维数组作为函数的参数传递,第1张

在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这样调用这个函数只需要把二维数组函数名传递就可以了。