目录
函数的概念
★★☆☆☆库函数
★★★★☆自定义函数
★★★☆☆形参与实参
★★★☆☆return语句
★★★☆☆数组做函数参数
★★★☆☆嵌套调用和链式访问
★★★☆☆函数的声明和定义
✍结束语
数学中我们其实就见过函数的概念,比如:一次函数 y=kx+b ,k和b都是常数,给⼀个任意的x,就 得到⼀个y值。其实在C语言也引入函数(function)的概念,有些翻译为:子程序,子程序这种翻译更加准确⼀些。C语言中的函数就是⼀个完成某项特定的任务的一小段代码。这段代码是有特殊的写法和调用方法的。C语言的程序其实是由无数个小的函数组合而成的,也可以说:一个大的计算任务可以分解成若 个较小 的函数(对应较小的任务)完成。同时⼀个函数如果能完成某项特定任务的话,这个函数也是可以复用的,提升了开发软件的效率。在C语言中我们一般会见到两类函数:• 库函数• 自定义函数
根据上述的函数概念,我们可以知道其实函数就是就是将我们的一部分功能较为长的代码,封装成一个函数,这样有什么好处呢,一就是我们可以不用多次敲代码使用该功能,只需要调用函数即可。二是大大增强代码的可读性,让读者读着舒服。好了那我们就快快开始这一讲吧。
2.1 标准库和头文件C语言标准中规定了C语言的各种 语法规则,C语言并不提供库函数;C语言的国际标准ANSI C规定了一 些常用的函数的标准,被称为标准库,那不同的编译器⼚商根据ANSI提供的C语言标准就给出了⼀系列 函数的实现。这些函数就被称为库函数。我们知道的 printf 、 scanf 都是库函数,库函数的也是函数,不过这些函数已经是现 成的,我们只要学会就能直接使用了。有了库函数,⼀些常见的功能就不需要我们自己实现了,⼀定程度提升了效率;同时库函数的质量和执行效率上都更有保证。 各种编译器的标准库中提供了一系列的库函数,这些库函数根据功能的划分,都在不同的头文件中进行了声明。库函数相关头文件:https://zh.cppreference.com/w/c/header有数学相关的,有字符串相关的,有⽇期相关的等,每⼀个头文件中都包含了,相关的函数和类型等信息,库函数的学习不用着急⼀次性全部学会,慢慢学习,各个击破就行。2.2 库函数的使用方法库函数的学习和查看工具很多,比如:C/C++官网的链接:https://zh.cppreference.com/w/c/headercplusplus.com:https://legacy.cplusplus.com/reference/clibrary/
这边的东西小赵就不细讲了,因为我们之前就已经接触过很多的库函数的概念,只是之前不知道具体的概念而已,然后小赵在这里也是提供了一些小赵同学在平常学习中常用的一些网站,大家可以根据这些网站去学习就行。我们下面主要谈谈自定义函数。
自定义形式如下:ret_type fun_name(形式参数){}• ret_type 是函数返回类型• fun_name 是函数名• 括号中放的是形式参数• {}括起来的是函数体(封装的代码,这段代码执行这个函数要执行的功能)
小赵在这里为大家举个例子帮助大家理解。
这里小赵举了一个有返回值的和无返回值的供大家参考,这里需要注意的是,我们有时候刚学函数的时候,对于无返回值的函数可能会忘记加(),但其实到后面我们会知道这个括号恰恰是函数的灵魂所在,它调用了函数,可以说是函数启动的开关。
下面来给大家聊聊实参和形参,其实这个事情很简单,我给大家说个事大家就能明白了。相信大家都见过压月饼的模具,或者是一些其他的蛋糕之类的模具,如果实在没见过也可以去抖音搜搜。那么我们在函数中设置的输入就像是这个模具。就像我上面的那个代码的x,y.
它的作用其实就相当于一个模具。我们将实实在在的数字,或者被赋值过的变量灌入这个模具中,然后这个模具就会经过一系列处理,帮我们的实实在在的数字,或者被赋值过的变量给和在一起,然后返回出来。
这大概就是实参和形参的概念,我们这里的x,y就是形参,而我们的实实在在的数字,或者被赋值过的变量就是实参。相信大家听到这里就明白了,原来其实它就是个工厂,帮忙加工一下我们的数据啊。原来如此,哈哈。
return语句在函数中扮演着极其重要的角色,它就是将我们模具压出来的结果返回值,它就是整个过程的结果。
在函数的设计中,函数中经常会出现return语句,这里讲⼀下return语句使用的注意事项。• return后边可以是⼀个数值,也可以是⼀个表达式,如果是表达式则先执行表达式,再返回表达式的结果。• return后边也可以什么都没有,直接写 return; 这种写法适合函数返回类型是void的情况。• return返回的值和函数返回类型不⼀致,系统会⾃动将返回的值隐式转换为函数的返回类型。• return语句执行后,函数就彻底返回,后边的代码不再执行。• 如果函数中存在if等分支的语句,则要保证每种情况下都有return返回,否则会出现编译错误。
这里先给大家提供数组函数的一些要求
• 函数的形式参数要和函数的实参个数匹配• 函数的实参是数组,形参也是可以写成数组形式的• 形参如果是一维数组,数组大小可以省略不写• 形参如果是二维数组,行可以省略,但是列不能省略• 数组传参,形参是不会创建新的数组的(后面函数栈帧会聊)• 形参操作的数组和实参的数组是同⼀个数组
我们都知道函数是一个集合,那么它又应该如何传入函数中呢,这里可以看小赵下面的操作。只演示一遍哦,好好看。
我们这里传入的就是整个数组。
接着就是嵌套,嵌套是什么呢,其实就像是俄罗斯套娃一样,一个函数下面还有一个函数,一个接着一套。那如果自己套自己叫什么呢?那个就叫做函数的递归,这个后面回聊,这里就不多说了。
它呢其实也简单,就是我们运行到那个函数的时候,我们填入的其实还是我们这个函数的x,y,因为这里是我们的地盘,然后在进入它的函数中,返回出值就好了。
大家都知道,代码不是飞的,不是跳的,它是一行一行脚踏实地地运行的,它的运行是一行接着一行。那我们在我们主函数执行我们自定义函数的时候吗,如果我们的自定义函数在主函数下面还没有被读入这个系统,你说这个代码能运行吗,我觉得运行不了,为了解决这个问题,我们在C语言中弄出了一个函数的声明,这个玩意就是告诉你我是存在的你别觉得我好像不存在一样,那么我们的系统因为知道这个信息就会一直向下运行找到函数的内容在运营。这个就像我们的身份证一样,函数拿着它就是告诉你,我是个函数,那么这个函数声明怎么弄呢?其实也简单就是我们原本定义函数的部分加个;就可以。
好了,今天小赵的分享就到这里了,如果大家觉得小赵的文章讲的还可以给小赵点个赞,当然如果对小赵这次讲的函数感觉难度不够,大家可以去看看小赵的专栏C语言小游戏中的扫雷,猜数字游戏,三子棋,里面都有使用各种函数,还有对static等作用的讲解,更有多个文件如何处理函数的讲解,欢迎大家阅览哦。
听说各位快要期末考试了,小赵准备给大家准备一起期末刷题专栏,帮助大家旗开得胜。
如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持小赵,如有不足还请指点,小赵及时改正,感谢大家支持!!!