1.函数概念:能够实现特定功能的的程序模块。
2.函数的结构:
类型标识符 函数名(参数列表) { 变量的申请; 语句; }
(1)函数名的命名规则:同变量名的命名规则。
(2)类型标识符:是返回值的类型。
(3)参数列表:由各种类型变量组成。各参数之间用逗号隔开。
3.形参与实参:
注意:参数列表分为无参和有参两种类型。
形式参数:有参函数中的参数在函数申明和定义时候被称为“形式参数”。
实际参数:在函数被调用时赋予具体值,具体的值被称为“实际参数”。
(1)实参与形参的个数相等,类型一致,顺序对应。
(2)在定义函数时候的形参,在未出现函数调用的情况时,它们并不占用内存中的存储单元。在发生函数调用的时候,函数的形参才会被分配存储单元且在函数调用结束后形参所占同的存储的那元被释放。
(3)实参是确定的值,若是形参是指针类型,则将实参的地址值传给形参。
(4)实参与形参之间是单向传递,即实参传递给形参。
4.默认参数:
在调用有参函数的时候,如果经常要传递某一个值到调用函数,在定义函数的时候,可以为形式参数设置一个默认值。程序将采用默认值作为函数的实际参数。注意:默认参数可以在函数调用时候改变。
5.函数的返回值:
return 表达式;
(1)函数返回值的类型与函数定义时候的类型标识符保持一致。(如果不一致,会以函数定义的类型标识符为准。)
(2)如果返回值为整值,在函数定义标识符时候可以省去类型标识符。
(3)函数中可以有多个return语句,但是每次调用只有一个return语句被执行。
(4)没有返回值的函数,类型标识符采用void。
(5)void函数不能进行赋值运算和值传递。
6.空函数:
空函数:没有参数列表和返回值,作用域也为空的函数就是空函数。
空函数的意义:在程序设计中往往根据需要确定若干模块,分别由一些函数来实现。而在第一阶段只设计最基本的模块,其他一些次要功能在以后需要的时候陆续补上。在程序编写的开始阶段,可以在将来准备扩充功能的地方写上空函数,这些函数没有开发完成,先占一个位置,以后好用一个编好的函数代替它。使得程序的结构清楚,可读性好,以后扩充功能更加方便,且对程序影响不大。
7.函数的递归调用:
递归函数:直接或间接调用自身的函数。
递归函数的优点:问题描述清楚,代码可读性强,结构清晰,代码量比使用非递归方法少。
递归函数的缺点:递归程序的运行效率低。对于时间复杂度和空间复杂度要求较高的程序,慎重使用递归函数。
注意:递归函数最先设置的就是停止条件。
8.重载函数:
重载函数:函数具有相同的函数标识符,但是参数类型或者参数个数不同。函数调用的时候,编译器以参数的类型及个数来区分调用哪个函数。注意:类型标识符即返回值类型不作为区分重载函数的一部分。
9.变量的作用域:
局部变量:在函数体内定义的变量。
全局变量:在函数体外定义的变量。
注:当全局变量和区域变量同名时候,程序会优先选择局部变量。若想使用全局变量则在前面加上区域符号::。
10.变量的生存周期:
定义在同一个函数中的变量生存周期并不完全相同。在不同语句块定义的变量,作用域大小也不一样。
11.变量的存储方式:
C++中有四种变量存储方式:
(1)自动变量(C++中默认的存储类型):
自动变量的作用域仅限于定义该变量的个体内。
自动变量属于动态存储方式。变量分配的内存在栈中,当函数调用结束后,自动变量的值会释放。
(2)static变量:
即静态变量,静态 局部变量的值在函数调用结束后不会消失,静态全局变量只能在本源文件中使用。
编译器会为静态变量赋予0值。
(3)register变量:
即寄存器变量,变量存储在寄存器中,提高访问效率。静态变量不能变成寄存器变量。
(4)extern变量:
在使用其他源文件的全局变量时候,只需要在本源文件使用extern关键字说明这个变量即可。