【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])这种形式来取值。

 

posted @ 2023-08-09 22:27  FBshark  阅读(44)  评论(0编辑  收藏  举报