【C语言基础】C语⾔中⼆维数组作为函数参数来传递的三种⽅法
指针数组和数组指针的区别
比如:int *a[5]是指针数组,int (*a)[5]是数组指针,前者表示一个数组,数组元素都是指向int型变量的指针,后者表示一个指针,该指针指向一个int型有5个元素的数组。
第一个a是个数组名,里面保存的是int指针。
第二个a是个指针名,它指向一个包含5个数据的int数组。
C语⾔中⼆维数组作为函数参数来传递的三种⽅法
c语⾔中经常需要通过函数传递⼆维数组,有三种⽅法可以实现,如下:
#include <stdio.h>
//⽅法⼀,形参给出第⼆维的长度。
void func(int n, char str[ ][5] )
//⽅法⼆,形参声明为指向数组的指针。(数组指针)
void func(int n, char (*str)[5] )
{
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);
}
⽅法三,形参声明为指针的指针。
例如:
#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"};
p[0] = &str[0][0];
p[1] = str[1];
p[2] = str[2];
func(3, p);
}
注意:第三种传参⽅式说明:在函数中使⽤传参过来的⼆维数组(指针)进⾏数组取值的时候不能使⽤(array[i][j])这种形式来取值。