OK,书接上回,咱们来继续了解有关函数的相关知识
一.实参和形参
在我们使用(调用)函数的这一过程中,将函数的参数分为实参和形参
(1)实参
实参就是我们在调用函数时,给函数传过去的参数,这个真实传递给函数的参数叫实际参数,我们简称为实参
(2)形参
形参就是我们在定义函数的时,接收到的参数,这个叫形式参数,我们简称为形参
中华文字博大精深昂,一个词肯定是由它代表的意义命名的,所以从我们“ 形式参数 ”这个字面意思不难理解,这个参数,仅仅只是一个形式而已,其实质就是:当我们定义了一个函数,但我们却不调用它时,这个形参只是一个形式而已,看得见,摸不着,不是真实存在的。我们不调用,它就不运行,也就不会向我们的内存去申请空间
因此得出结论:形式参数只有在函数被调用的过程中为了存放实参传递过来的值,才向内存申请空间(这一过程我们就叫做形参的实例化)
(3)实参和形参的关系
在上面我们提到了,实参是用来传递给形参的,这就是他们之间最直接的联系,但有一点诸君需要重点关注,那就是实参和形参各自是独立的内存空间。也就是说,实参和形参的存放地址是不一样的,所以我们将其理解为:形参只是实参的一份临时拷贝
通过我们的调试窗口就能将这一概念可视化。由此观之,形参和实参在内存中的地址是不同的
二. return 语句
return 语句,咱们的老朋友了昂,在函数的设计中,函数中几乎都会出现return 语句,什么时候没有?void 返回类型的时候嘛,都无需返回了,还 return 个什么呢?关于函数中的 return 语句,有以下几个需要注意的点:
(1)return 后边可以是⼀个数值,也可以是一个表达式,如果是表达式则先执行表达式,再返回表达式的结果
(2)return 后边也可以什么都没有,直接写 return ; 这种写法适合函数返回类型是 void 的情况
(3)return 返回的值和函数返回类型不一致,系统会自动将返回的值转换为函数的返回类型
(4)return 语句执行后,函数就彻底返回,后边的代码不再执行
(5)如果函数中存在 i f 等分支的语句,则要保证每种情况下都有 return 返回,否则会出现编译错误
三.数组作函数参数
在以上我们演示的代码中,我们用函数实现了加法运算,传递过去的是整型,返回的也是整型,那么这个时候就有小伙伴会问了:我们函数参数只能是数吗?Good question!当然不是啦,只能是数的话这个功能也太鸡肋了,我们的参数可以是各种类型的,比如我们接下来讲到的数组作参数
如图,我们创建一个数组,把数组作为参数传过去,实参用数组名,形参则要写清楚类型,一维数组作参数,数组中的元素个数可省略,但必须有括号。用一个函数来修改数组内的值,在用一个函数来打印,并且两个函数只需要在调用时在其内部完成操作即可,所以我用的是 void 类型,无需返回
四.嵌套调用
(1)嵌套调用的概念
函数的嵌套调用并不是单纯的像俄罗斯套娃那样的一层套一层,它是各个函数之间的相互调用,更类似于我们的乐高积木那样的,一件大乐高模型是由一个又一个小的乐高零件相互构建而成;一个优秀的代码也是由诸多函数之间的相互调用而成的有效程序
无需多言,这里给大家用一道题来举例:
查询某年某月有多少天:
(1)在main函数中我们调用了 scanf 函数,printf 函数,还有我们自定义的Day_of_Month
(2)在Day_of_Month中我们调用了Leap_Year,这就是嵌套调用的体现了
重点:函数可以嵌套调用,但不能嵌套定义!!!
一些需要注意或者不容易理解的点我已经在代码中为诸君注释出来了(如果实在又不懂的可以在评论或者私信问我哈,随时恭候)
五.链式访问
(1)这个所谓的“ 函数的链式访问 ”,其实质就是将一个函数的返回值作为另一个函数的参数,就像链条一样将函数串起来
列如我们需要求数组里的元素个数,我们一般是这样写:
上面我们先是定义了一个“ sz ”,再利用sizeof求出数组元素个数,再将这个值赋值给我们的sz,我们如果想将其修改成链式访问的格式,就可以直接打印sizeof求出数组元素个数的这个值,不需要sz来作中转,如图:
(2)一段“ 有趣 ”的代码
为了使诸君更加深刻地理解“ 链式访问 ”,大家可以试着想一想,下面这段代码最终输出的是什么
OK,咱们来揭晓答案——4321,诸君有没有做对呢?
我相信,绝大部分的小伙伴是没有做对的昂,这不怪大家,这是为什么呢?因为我还藏了点东西哈哈哈,关键点就在于 printf()函数的返回值这一块儿呢,还未跟大家提及,莫急莫急,我这就来为诸君讲解
大家可以自己去我上期给大家说的那两个网站搜一搜“ printf ”嘛,这样一搜,有关 printf 函数的知识点就都出来了,我这里以 cplusplus 为例:
在关于 printf 函数的返回值里是这样说的:
其中有一句:On success, the total number of characters written is returned
翻译成中文就是:成功后,将返回写入的字符总数
·这是啥意思呢?就以我们上面的43为例,这是两个字符“ 4 ”,“ 3 ”,我们成功打印43后,我们会返回一个“ 2 ”
因此,我们返回一个“ 2 ”,再打印“ 2 ”,然后又因为 “ 2 ”是“ 1 ”个字符,又会返回一个“ 1 ”,再打印“ 1 ”,最终答案“ 4321 ”就是这么来的
OKK,有关函数相关知识点的讲解今天就到此为止了,函数参数,调用之类的其实我们早就在不知不觉中运用起来了,只是这一板块一直没单独拎出来正式的讲过而已。诸君有什么不懂的或者我哪里说的有误的,欢迎留言和私信跟我讨论!函数的知识大概还会有一期内容,欲知后事如何,且听下回分解!与诸君共勉!!!