对于普通的一维数组,我们只需要这样声明一个函数即可:
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 直接给出源码,要命…
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论