函数总结

1.函数分为标准库函数和自定义函数。
函数作为一个整体的代码,通过将相对独立的,经常使用的功能代码定义为函数。
2.函数先定义后使用。函数定义与函数声明不一样。
函数定义 返回值类型 函数名(形参)
{ 声明部分;
语句部分;
}
3.程序执行时从主函数开始,从主函数结束。通过函数名main找到主函数的内存单元,依次执行单元指令,当遇到不同被调函数名,找到相应的被调函数的内存单元,执行被调函数。一个函数就是 输入——处理——输出 过程的体现。
4.返回值
函数的类型即返回值类型。函数的返回值就是函数在完成特定功能或数据处理后的处理结果。如果函数只是为了实现一组特定的功能而不需要返回处理结果,用void即无类型,函数将值输出至屏幕,不能将函数调用放在赋值语句或表达式中,应使用一条纯粹的函数调用语句。
return的返回值可以是常量,变量,表达式。括号可以去掉。
一旦执行return语句,把处理结果返回给主调函数,将控制权还给主调函数,结束函数的调用。
5.形参和实参
实参就是调用函数时调用表达式的参数。
形参在定义函数的首部中说明形参的类型与名称。如果没有返回值,则定义函数时可以没有形参,但函数名后面的括号不能省。
实参可以是常量也可以时变量。
实参类型要与形参类型看齐。
实参与形参之间时数据传递而不是替换。
在赋值语句中,返回值类型应该与主函数中接受返回值的参数的类型相同。
6.函数定义时不能定义在另一个函数中。
函数声明 返回值类型 函数名(形参) 其中形参一栏中只用写形参的类型与个数即可,因为,在函数调用之前,形参并不存在。
7.函数的调用
常规调用:如果没有返回值,单独作为一句语句使用。 函数名()
有返回值,用赋值语句。 参数=函数名(实参)
单独作为一个函数参数 函数名(函数名(实参),实参)
嵌套调用:一个函数中调用另一个函数。
递归调用:重点 前提 该问题可以分为一步一步完成,且是第n步,第n-1步....完成的。一定要有终止条件,在函数中用if语句完成,if加终止条件,return 加终止条件下得到的结果。else return n与n-1的关系是,且n-1的式子调用了本身的函数。
8.数组元素作为实参
与使用变量做实参一样
9.数组名做实参
数组名做实参时,传递的不是数组元素的值而是,数值储存单元的起始地址。形参应该定义成与实参数组一样类型的数组。
重点:实参与形参数组的起始地址相同,即共同使用同一段存储单元。在被调函数中针对形参数组做的任何改变,就是对实参数组的改变。通过地址传递,可以使被调函数直接引用实参数组元素。
在被调函数中可以不声明形参数组的大小。void 函数名(数组名[])
10.局部变量
函数内定义的变量,函数的形参,只在函数内使用。
函数内复合语句内定义的变量在本复合语句内使用。
11.全局变量
函数外定义的变量,从定义变量的位置到所在源文件结束。
重点:同一作用域中不能有同名变量
没有包含关系的作用域中,同名变量互不干扰。
有包含关系的作用域中同名变量,局部有效。
12.变量的生存期
生存期:变量在什么时间有储存空间。
定义变量就是在申请一个储存空间的过程。
变量定义时要说明: 数据类型 储存类别
存储类别:auto staic register extern
动态储存区的变量:auto 局部变量 ,或 局部变量在不声明时做auto处理。
静态存储区的变量:全局变量,staic 局部变量
外部变量:extern 全局变量
动态存储区变量与静态存储区变量的区别:动态变量每调用一次函数,变量就被赋一次值,静态变量,只赋值一次,每次调用函数不再赋值,而是保留上次函数结束时的值。
动态不赋初值,值不确定,静态,则自动赋值0.
静态全局变量可以被所有函数引用,静态局部变量在函数结束调用后依旧存在,但不能被其他函数调用。