Ricky Hao

C 二维数组的传参方法

对于普通的一维数组,我们只需要这样声明一个函数即可:

void fun1(int *ar);
void fun2(int ar[]);

但是,对于二维数组,函数声明就会比较复杂,常见的有:

void fun3(int ar[][10]);    //这里的10指二维数组第二维的大小,必填,且必须为常量
void fun4(int *ar[10]);

这两种声明方法最为普遍,而且,使用起来也方便。可以直接在函数体内使用数组。
但是,有个问题就是,以上两种方法必须要提前确定传入的二维数组第二维的大小。然而在很多情况,我们是不能确定的。那么,该怎么办呢?

void fun5(int **ar,int lsize);

这是一种声明方法,本意是传递一个指针的指针变量,但是我们用来传递二维数组。
对于这种方法,在函数体内使用起来比较麻烦:

*((int *)ar+i*lsize+j)        //这是这种方法的调用方法,相当于ar[i][j]

是不是略复杂?不好理解?没事,现在就来说说。
首先,我们是要以指针形式来调用,所以不能使用数组形式。
其次,我们需要用(int *)强制类型转换,才能读取数据。而后面的lsize的意思就是列数(也可以理解为第一维的个数)。
这样,就可以做到任意二维数组的传参。
Warning!注意不能越界!!!

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据