C++程序设计之函数
1、函数是C++源程序的基本模块。
函数的使用是通过函数调用完成的。
C++程序的全部工作都是由各式各样的函数完成的。
2、函数由返回值类型、函数名、参数表和函数体组成。
函数定义:
返回值类型 函数名( 类型1 参数名称1,类型2 参数名称2,类型3 参数名称3……)
{
语句
}

3、返回值类型指明了函数返回值的类型。函数可以没有返回值,用void指定返回类型。
函数名是由用户定义的标识符,函数名后面有括号,其中可以无参数,但括号是必不可少的。
函数的参数是用于向函数传递数据的变量,参数可以为空
4、如果函数是在调用语句后定义的,在调用之前应对被函数进行声明。
返回值类型函数名(类型 参数,类型 参数……);
当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。

5、函数的参数分为形参和实参
形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。
实参出现在调用语句中,进入被调函数后,实参不能使用。

6、形参变量温狠只有在被调用时才分配内存单元。
实参可以是常量、变量、表达式等。
实参和形参的数量和顺序应严格一致。
注:函数调用中的参数传递发生的数据传送是单向的。
7、函数可以在参数表中设置一个或多个参数的缺省值,缺省参数只能从后向前替代缺少的实参值。提供缺省参数时,也应该从后向前设置缺省值。
参数缺省值一般出现在函数的声明中。

8、数组可以作为函数的参数使用,进行数据传递。
把数组元素(下标变量)作为实参使用
把数组名作为函数的形参和实参使用
用数组元素作实参时,形参并不是数组,而是和数组类型相同的变量。
用数组名作函数参数时,要求形参和相对应的实参都必须是类型相同的数组
注:函数形参对数组大小不敏感。

9、函数的返回值又被称作函数值。函数值只能通过return语句返回调用它的函数。
在函数中允许有多个return语句,可以在函数内的任何地方结束函数执行并返回函数值。
返回值类型不为void的函数,必须有return语句

10、通过对函数的调用来执行函数体。
调用方式:函数名(实际参数表)
对无参函数调用时则无实参表。
实参表中的参数可以是常数仗匠著、变量或其他构造类型数据及表达式,各实参之间用逗号分隔。

11、方式调用函数:
1、函数表达式
int c= max(x,y);
2、函数语句
printf ("%D",a);
3、作为函数实参
printf("%d",max(x,y));
12、C语言中不允许作嵌套的函数定义。不能在函数内部定义其他函数。
C++允许在一个函数的定义中出现对另一个函数的调用,杰爹这就是函数的嵌套调用。
13、函数的递归调用
一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。
注:递归函数必须有终止条件,否则会出现死循环调用,导致程序崩溃

14、ff(5);
调试环境下的【调用堆栈】窗口结果如下

15、函数重载,函数名一样,参数不一样的为重载函数。
如果函数名一样且参数一样,只有返回值不一样,这样不是重载函数。

16、这里要注意一个问题,隐式类型转换导致重载函数产生二义性。

17、内联函数,用inline关键字修饰的函数是内联函数。
1.关键字inline必须与函数定义体放在一起才能使函数成为内联
2.将inline放在函数声明前面不起任何作用。
3.如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。
4.如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。
内联函数的优势:
1.类型安全检查
2.自动类型转换
3.可以作为类的成员