数组/指针的传参问题

朋友们,到站啦!指针进阶第四站:传参问题
0.引例 自定义函数里形参的类型,要和函数调用中传过去的实参类型相对应
test函数里的是int类型,我们传过去的参数a也是int类型
                void test(int n){}int main(){ int a=1 test(a); return 0;} 好了,现在你已经知道了函数传参的基本概念了吧!
那么就来分析一下数组传参、指针传参的代码吧!
1、一维数组传参 看看以下函数的代码示例
你觉得谁是正确的,谁是错误的呢?
                                      include void test(int arr[]){}void test(int arr[10]){}void test(int *arr){}void test2(int *arr[20]){}void test2(int **arr){}int main(){ int arr[10] = {0}; int *arr2[20] = {0}; test(arr); test2(arr2); return 0;} no.1 形参使用数组的形式来接收,正确
no.2 同样是数组的形式,正确
需要注意的是,数组传参并不会开辟一个新的数组
所以函数[ ]里的数字是多少并不影响
no.3 数组名是首元素的地址,用指针接收,正确
no.4 arr2是一个指针数组,(int *arr[20])和原数组对应,正确
no.5 数组名是首元素地址,arr2的首元素是一个int*类型
可以用二级指针来接收,正确!
2、二维数组传参 了解完一维数组了,那就来看看二维数组
以下的函数传参,哪些是对的,哪些是错的呢?
                                          void test(int arr[3][5])//一一对应,正确!{}void test(int arr[][])//省略列,错误!{}void test(int arr[][5])//可以省略行,正确!{}void test(int *arr)//二维数组的首元素是第一行{}//第一行是int(*)[5]类型,错误!void test(int* arr[5])//指针数组,错误!{}void test(int (*arr)[5])//数组指针,正确!{}void test(int **arr)//arr不是一级指针的地址,错误!{}int main(){ int arr[3][5] = {0}; test(arr); return 0;} 根据二维数组传参的代码,复习以下知识点
(1)二维数组的首元素是第一行
(2)二维数组在定义的时候可以省略行,不能省略列
第一行的类型是int[5],应该放进 数组指针里!
3、一级指针传参                                     #include void print(int *p, int sz)//用int*来接受{ int i = 0; for(i=0; i pp是int**类型,而&p是指针变量的地址,要用二级指针来接收
                            #include void test(int** ptr){ printf(num = %d, **ptr); }int main(){ int n = 10; int*p = &n; int **pp = &p; test(pp); test(&p); return 0;} 再来看如下代码
&p、pp、arr这三个参数的类型都是二级指针
test函数里面要用char**来接收
                                void test(char** p){}int main(){ char ch = 'w'; char* p = &ch; char** pp = &p; char* arr[5]; test(&p); test(pp); test(arr); return 0;} arr是指针数组的数组名,数组名是数组首元素的地址
数组的首元素是char*类型,所以要用二级指针来接收
5、如何判断参数类型 如果我们在写代码的时候,不缺定应该用什么类型来接收的时候
可以写一个测试代码,vs编译器会报错“类型不一致”
结语 传参问题并不算非常难,但我们仍要熟练掌握
这样才能避免在写自定义函数的时候出现参数类型不同的bug!
第四站数组传参到这里就结束啦!


D-Link多款路由器存在命令注入的攻击
光端机的开关量存在怎样的问题,如何解决
华硕ROG游戏手机2评测 只需要3499元这太不像“ROG”了
伺服驱动器和伺服系统的区别
柔性电路板的各种硬性材料
数组/指针的传参问题
恒大造车梦 今年六月份将量产
工业机器人将面临资本这把双刃剑,该怎么办?
亚都加湿器,科技智能家居产品典范
Marvell推出业内首个面向汽车业的IEEE千兆比特以太网
“行走”的垃圾桶 它的问世或将让80%的清洁工下岗!
奥比中光微软英伟达联合研发的新一代3D相机Femto Mega正式量产
了解寄生参数是怎么影响电容的滤波效果
电子封装-低温共烧陶瓷基板
全功能双CameraLink SDR接口 FMC子卡QT7421介绍
人工智能如何促进新技术新理念的孕育和应用
诺基亚4.9G技术即将到来,5G网络竞争激烈,离我们也不远了
创始人王鹏飞:TAC溯源链期待专业审计机构早日出现
游戏AI的前世今生,完美的目标不完美的世界
苹果中国推出智能电池手机壳更换计划 将免费更换合格的电池手机壳