文章目录
前言
在C语言中,函数是重要的组成部分,几乎每次编辑代码都会用到函数,本篇将尽可能详细向你介绍关于初阶函数你需要掌握的知识。
提示:本人目前还是IT萌新,小菜鸟一只,如有欠佳之处还请大佬多多指点,抱拳!以下是本篇文章正文内容,下面案例可供参考
一、函数是什么?
在这里给大家推荐一个网站:https://cplusplus.com ,可以在这个网站上查询库函数的使用方法。
二、函数实现引例
1.判断素数
2.判断闰年
3.二分查找
下面举例要在这个数组中查找“7”这个数
三、函数的使用
1.函数的递归
1.相关知识点+引例1
2.引例2——顺次打印字符(三种方法)
上述是用递归的方式,对一个多位数顺次打印每一位上的数字,下面用三种方式实现顺次打印一个字符串的每一个字符:
1、创建了临时变量计数
2、不创建临时变量—递归
3、不创建临时变量—指针减指针(拓展)
看到这里小伙伴们应该大致理解了<函数递归>的核心就是“大事化小”,只要是一个问题可以把复杂的问题(在原理相同的前提下)简单化,似乎使用函数递归也没有那么难!
细心的小伙伴可能已经发现了,这个递归,怎么那么像循环语句呢?
其实递归就是循环的一种。
那小伙伴们此时应该就有疑问了:
“这个递归函数和for循环有什么区别呢?”
“递归函数和for循环我该使用哪一个呢?”
别着急 往下看!
3.引例3——斐波那契数列
下面用两种方法实现斐波那契数列:
1、递归
2、for循环
所以,递归也是有缺陷的,有些情况下尽管可以使用递归解决,但并不合适。
并且递归能干的事情,for循环可以干,但for循环可以干的事情,递归不一定能干,需要随着对代码的理解,视情况而定使用哪一种方式解决问题。
而递归的牛X之处就在于:合适的情况下可以用极少的代码解决问题。
2.函数的嵌套调用
3.函数的链式访问
下面举三个栗子为大家介绍函数的链式访问~
这里埋一个铺垫:
这个函数的返回值是char*,请大家思考:为什么呢? 明明是复制字符串,为什么还需要返回值呢?
如果小伙伴们琢磨不出来可以关注作者 我会在下一篇文章《函数进阶介绍》里给出答案~
4.回调函数
回调函数是指:将一个函数(A)作为另一个函数(B)的参数,通过这种方式在函数B中调用函数A。
那么函数B的实参就是函数A的地址,函数B的形参就是一个函数指针,这个指针指向函数A。
这里涉及到<指针进阶>部分的知识点,这里我就不放代码啦~
为了方便大家将知识联系起来,建立完整的知识链,我会在后续更新《指针初阶》和《指针进阶》两篇文章。在《指针进阶》里面会给大家分享一个回调函数的例子
感兴趣的小伙伴可以蹲一手!
已经更新啦!在这里噢!
5.小结
区分上述四种函数使用方式:
函数的递归就是自己调用自己;函数的嵌套就是自己调用别人,
函数的链式访问是另一个函数的返回值作为函数参数;函数的回调是另一个函数的地址作为函数参数。
四、函数的声明和定义
不知道小伙伴们发现了没有,上述所有的代码,我的函数总是放在main函数的上面,我为什么有这样的习惯呢,这就要说到函数的声明和定义了。
函数的声明:
1告诉编译器,我自己写了一个函数,叫什么名字,参数是什么,返回类型是什么,但具体什么时候用这个函数,这个函数用或不用,不重要。
2.函数的声明一般在函数使用之前。
3.函数的声明一般放在头文件中。(平时我们练习小块的代码一般不需要自己创建头文件,但如果我们写稍微复杂一些的代码,就需要自己创建头文件,以及不止一个的源文件。)
函数的定义:
就是函数实现的具体实现,交代函数的功能。
如果我把main函数放在上面当编译器从上到下编译的时候,就不知道在main函数里的自定义函数是什么,所以就会报错。
解决方法就是先声明再使用:
总结
以上就是今天要讲的关于<函数初阶>的内容,本文仅仅简单介绍了<函数初阶>部分的使用,而<函数>相关知识还不止这些,如果大家喜欢我的文章,请点赞关注支持一下!(手写真的很费时间)后面我会给大家带来<函数进阶>部分的内容。
哦对了,如有欠佳之处欢迎各位兄弟姐妹们指点!抱拳x2!