c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下:
方法一, 形参给出第二维的长度。
#include <stdio.h>
void func(int n, char str[][5] )
{
int i;
for(i = 0; i < n; i++)
printf("\nstr[%d] = %s\n", i, str[i]);
}
int main()
{
char str[][5] = {“abc”,“def”,“ghi”};//一维数组个数是否指定没关系,够用就行
func(3, str);
return 0;
}
用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:
void Func(int array[3][10]);
void Func(int array[][10]);
二者都是合法而且等价,但是不能把第二维或者更高维的大小省略。
方法二,形参声明为指向数组的指针。
例如:
#include <stdio.h>
void func(int n, char (*str)[5] )
{
int i;
for(i = 0; i < n; i++)
printf("\nstr[%d] = %s\n", i, str[i]);
}
int main()
{
char str[][5] = {“abc”,“def”,“ghi”};//一维数组个数是否指定没关系,够用就行
func(3, str);
return 0;
}
注意:
在void func(int n,char (str)[5])中,*array需要用括号括起来。*
这种形式的声明参数是一个指针,它指向具有5个元素的一维数组。因为[]的优先级比 * 的优先级高,故*array必须用括号括起来,否则变成了
void func(int n,char *str[5]);
这时候参数相当于是声明了一个数组,该数组有5个元素。
方法三,形参声明为指针的指针。
例如:
#include <stdio.h>
void func(int n, char **str )
{
int i;
for(i = 0; i < n; i++)
printf("\nstr[%d] = %s\n", i, str[i]);
}
void main()
{
char* p[3];
char str[][5] = {“abc”,“def”,“ghi”};
func(3, str);
}
在函数中使用传参过来的二维数组(指针)进行数组取值的时候不能使用(array[i][j])这种形式来取值。
参考资料:
https://blog.csdn.net/kangxidagege/article/details/79475537
http://www.cnblogs.com/yangxi/archive/2012/03/22/2411452.html