【C 语言】指针进阶第四站,数组 / 指针的传参问题
[TOC]
朋友们,到站啦!
指针进阶第四站🚏,传参问题
0. 引例
自定义函数里形参的类型,要和函数调用中传过去的实参类型相对应
在初阶 C 语言的学习里面,我们了解到传参分为
传址
和传值
两种类型一起来复习一下吧👉【链接】
test 函数里的是 int 类型,我们传过去的参数 a 也是 int 类型
1 | void test(int n) |
好了,现在你已经知道了函数传参的基本概念了😁
那么就来分析一下数组传参、指针传参的代码吧!
1. 一维数组传参
看看以下函数的代码示例
你觉得谁是正确的,谁是错误的呢?
1 | include <stdio.h> |
NO.1 形参使用数组的形式来接收,正确
NO.2 同样是数组的形式,正确
需要注意的是,数组传参并不会开辟一个新的数组
所以函数
[ ]
里的数字是多少并不影响NO.3 数组名是首元素的地址,用指针接收,正确
NO.4 arr2 是一个指针数组,
(int *arr[20])
和原数组对应,正确NO.5 数组名是首元素地址,arr2 的首元素是一个 int * 类型
可以用二级指针来接收,正确!
2. 二维数组传参
了解完一维数组了,那就来看看二维数组
以下的函数传参,哪些是对的,哪些是错的呢?
1 | void test(int arr[3][5])//一一对应,正确! |
根据二维数组传参的代码,复习以下知识点
- 二维数组的首元素是第一行
- 二维数组在定义的时候可以省略行,不能省略列
第一行的类型是 int [5],应该放进数组指针里!
3. 一级指针传参
1 |
|
4. 二级指针传参
什么是二级指针?👉点我
以下是二级指针传参的基本形式
pp 是 int** 类型,而 & p 是指针变量的地址,要用二级指针来接收
1 |
|
再来看如下代码
&p
、pp
、arr
这三个参数的类型都是二级指针
test 函数里面要用 char**
来接收
1 | void test(char** p) |
arr
是指针数组的数组名,数组名是数组首元素的地址
数组的首元素是 char * 类型,所以要用二级指针来接收
5. 如何判断参数类型
如果我们在写代码的时候,不缺定应该用什么类型来接收的时候
可以写一个测试代码,VS 编译器会报错 “类型不一致”
结语
传参问题并不算非常难,但我们仍要熟练掌握
这样才能避免在写自定义函数的时候出现参数类型不同的 bug!
站稳了,马上驶往下一站🚌:函数指针
- 最新
- 最热
- 最早
- 作者
点击重新获取 | 打开控制台