C 二维数组的传参方法

  • A+
所属分类:安全博客

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

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!注意不能越界!!!

FROM :rickyhao.com | rickyhao.com

相关推荐: EDU-CTF Final 2018 Web小记

EDU-CTF Final 2018 Web小记 文章首发于安全客:https://www.anquanke.com/post/id/170361 当时比赛的时候正在复习期末,根本没空玩。昨天考完科二,终于有时间仔细看看了。 TwoFile 直接给出源码,要命…

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: