内容简介:函数是C的核心和理念。函数在被调用时执行,当一个函数被调用,调用者会把数据作为参数传给函数,参数被函数用来执行特定的逻辑,比如求平方。接下来函数内的语句开始执行,执行完毕后把所得到的结果返回给函数调用者。
函数是C的核心和理念。
函数的定义
函数
是一个有名字的独立代码块,这个代码块能完成指定的功能,有时候会返回值给调用程序。
- 函数有唯一的名称。
- 函数是独立的,函数能不被其他打断。
- 函数能完成指定的功能。
- 函数能返回值给调用程序。
函数如何工作
函数在被调用时执行,当一个函数被调用,调用者会把数据作为参数传给函数,参数被函数用来执行特定的逻辑,比如求平方。接下来函数内的语句开始执行,执行完毕后把所得到的结果返回给函数调用者。
函数和结构化
通过使用函数,可以实现结构化编程,把实现某一功能的代码独立出来,包装成函数,在需要的地方进行调用,上图的square就是这样的代码。
结构化的好处
- 把一个复杂的逻辑拆分成小的任务,代码可读性高。
- 调试起来简单,由于函数的独立性,可以快速定位到问题的位置。
- 增加以后的开发效率,也就是函数的可重用性,遇到重复或者相似的功能,代码可直接拿过来用。
如何结构化
确定要实现的目标,将目标细分为几步,每步是定为一个函数。如求平方中,总共有两步,确定要做的是求2的平方并打印出来。第一步是求平方,第二步是打印,因为打印是系统提供的函数,我们只把求的过程独立出来就好。
自上而下执行
函数按自上至下顺序执行(暂不说控制语句),执行完一个之后继续执行下一个。有的时候,main函数中代码量很少,仅仅是调用函数的语句。实际实现功能的代码都在各个被调用的函数当中,就行菜单一样,main函数只是相当于一个目录,真正的实现都在点击事件对应的函数当中。栗子,逻辑都在show函数中执行:
写一个函数
写函数最重要的就是知道想要什么,有了目标,写函数就容易许多。函数由三部分组成,函数头,函数体和函数原型。有些时候,函数原型可以省略。
函数头
函数头
由三部分组成,类型,名称和参数。
- 函数类型也就是函数执行后返回值的类型,可以是当前C中的任意类型比如int,char等。
- 函数名称是函数的唯一标识,可以随意叫什么,不过最好是能见名知意。
- 参数,多数函数都有参数,参数就是要处理的数据,参数需指明类型,多个参数用逗号隔开。
函数体
函数体
是函数逻辑的具体实现部分,用大括号包裹,在函数头之后。一般包括局部变量声明,函数语句,和返回语句。
- 局部变量是在函数内部声明的,用于存储当前函数的临时数据。为了可读性,局部变量尽量不要和函数外部的变量重名。
- 函数语句是函数逻辑的具体实现部分,函数仍然可以调用其他函数。对于函数的长度,虽然没有限制,不过相对的短一些比较好。如果函数过长,那么函数执行的任务可能需要再次拆分。
- 返回值是函数对参数执行逻辑之后得出的最终结果,返回给调用者的值。
函数原型
函数原型的作用是将函数的类型,名称,参数信息告诉编译器,方便编译器对函数调用做检查。实验中发现,编译器会对类型,名称做严格的检查,如果不一致就会报错。参数检查比较复杂,函数原型的参数类型和对应函数的参数类型一定要相同,个数可以相同或者函数原型不写任何参数。但是函数原型如果有参数并且和函数的参数个数不等,则会报错。函数原型可以的参数可以不写名称,或者写其他名称。
调用函数
在需要的位置,写被调用函数的名称并在后面添加括号,括号内为函数需要的参数,如果函数不需要参数,括号置空即可。可以将函数的返回值赋值给变量,也可以作为其他函数的参数。
递归
是调用函数自身,在一些特殊的运算中会经常出现递归,比如求阶乘。递归比较耗资源,非必要的时候不要用。
函数位置
目前阶段比较简单,代码放在一个文件中就好。实际上,函数一般会分开不同的文件放置,在需要调用的地方引入头文件(.h文件)。比如printf函数,我们引入了stdio.h之后就能用,但是printf的函数并未在我们当前的文件中定义。
内联函数(Inline Functions)
对于使用频繁并且体量小的函数,可以在函数前用inline关键字修饰。 内联函数 的作用就是在函数编译的时候将函数的内容整体复制到调用的位置,减少函数调用带来的资源消耗。很明显,内联函数会增加代码的编译时间和编译后程序的体量。inline关键字要放在函数实现部分,放在函数原型前是没有作用的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。