第八篇:函数
说明函数的学习分为库函数和自定义函但我们学习的重点是自定义函数所以库函数本篇文章不作说明感兴趣的朋友们可以自行搜索资料学习一.自定义函数1.函数的概念完成某个特定任务的代码就叫函数。2.函数的创建ret_type fun_name( 形参){函数体}其中ret_type是函数返回类型返回的值是整型还是字符型还是浮点型fun_name是函数的名称名称尽量起的有意义方便后续管理形参就是函数的参数用数学函数类比函数ykxb,里面的y和x就是函数的参数参数可以没有没有参数那括号内就写void,表示没有参数。如果有参数必须交代参数的类型名字和个数函数体就是这个函数要完成的计算过程。对函数的理解可以把函数想象成一个工厂。想让工厂运作起来就需要原材料这个原材料就是形参也叫形式参数。把原材料送给工厂后工厂要进行加工加工的过程就可以想象成函数完成计算的过程此时工厂就是函数体。举例写一个加法函数应用函数时应先对函数进行定义再调用函数最上面的int 就是函数的类型add是函数的名称x和y是形参形参要有类型名字和个数。大括号括起来的就是函数体就是函数要具体计算的部分主程序里面的 c add(a,b) 就是对函数的调用。二.形参与实参1.形参在对函数进行定义时使用的参数就是形参也叫形式参数就比如上图中的 x ,y。若只定义函数而不调用函数形参只是形式上存在不会向内存申请空间也不会真实存在所以叫它形参。2.实参真实传递给函数的参数就叫实参也叫实际参数在调用函数时使用的参数就比如上图中的 a 和 b 。三.return语句注意事项1return后可以是数值或表达式如果是表达式则系统会先执行表达式再返回表达式的值2return后也可以什么都没有直接写成return; 这种写法适合返回类型是void的情况3return执行后函数就彻底返回后面的代码就不再执行4return返回值类型如果与函数返回值类型不一样则return语句的返回值类型会被转换成函数的返回值类型5若函数中有if语句则需要保证每一种情况都有return返回6如果函数的返回类型不写则默认为int类型7函数有返回值类型而return没有则函数返回值是未知的四.数组作为函数有时数据过多且不易用循环处理时可以将数组作为函数处理。例如写一个函数将整型数组中的所有函数全部设置为 -1 再写一个函数打印出来。分析本质上是对数组的操作数组元素的访问可以用下标实现具体内容见小编上篇文章找出对应元素后将其设置为 -1 即可。因为是将所有数组元素设置为 -1 ,所以还要用到循环。最后再写一个函数再用循环的方法打印出来即可。代码如下五.嵌套调用与链式访问1.嵌套调用函数之间的相互调用就叫嵌套调用。就像乐高积木一样一块积木需要借助另一块积木堆积上去最终组成一个完整的项目。例如计算某年某月有多少天。分析年份分为闰年和不是闰年。如果是闰年二月份有28天否则有29天。然后还要将计算结果输出到屏幕上所以要写两个函数一个函数判断是否为闰年一个函数将计算结果输出到屏幕上。代码如下2.链式访问1概述将一个函数的返回值作为另一个函数的参数printf函数的返回值的读取的字符个数。在上图中最右面的printf读取到4和3两个字符所以中间的printf函数的参数就是2中间的printf读取到2一个字符所以它的返回值就是1。最左面的printf的参数就是1。从右向左依次打印结果为4321。六.static和extern在介绍这两个概念前先来说一下作用域和生命周期。1.作用域限定代码名字可用性的代码范围就是这个名字的作用域。可以用局部变量类比理解2.生命周期变量从创建到销毁之间的一个时间段就叫生命周期局部变量的生命周期是从进入作用域变量创建到出作用域全局变量的生命周期是整个程序的生命周期3.static:用于修饰全局变量局部变量和函数1修饰全局变量会使得函数只能在本源文件中使用在其他源文件中不能使用2修饰局部变量会改变和局部变量的生命周期使得其生命周期和整个程序的生命周期一致但局部变量的作用域不变4.extern用于声明外部符号若全局符号在A文件中定义想在B文件中使用则可以在B文件中使用extern进行声明。