第六章 函数
函数可以有0个或者多个参数,可以重载函数,也就是同一个名字可以对应不同的函数。
1.函数基础
函数包括返回类型,函数名,形参列表,函数体。
**函数三要素是返回类型,函数名,形参列表,描述了函数的接口,**说明了调用该函数所需的全部信息。
调用函数时用调用运算符(),()内时实参列表,使用实参初始化函数的形参。
实参是形参的初始值,二者类型需要匹配(可能会发生隐式类型转换),数量需要一致。形参可以为空。
函数返回类型不能是数组或函数类型,但可以是指向数组或者函数的指针。
1.局部对象
C++中,名字有作用域,对象有生命周期。
函数是一个语句块,块构成一个新的作用域。所以形参和函数体内部的变量统称为局部变量,局部变量的生命周期依赖于定义的方式。(与之不同的是,函数体之外定义的对象存在于程序的整个执行过程,此类对象在程序启动时创建,程序结束时才会被销毁)
自动对象:普通局部变量对应的对象在函数控制路径经过变量定义的语句时创建该对象,到达块所在末尾时销毁它。块执行结束后,自动对象的值自动变成未定义。形参是自动对象。
局部静态对象:将变量定义成static类型,局部变量的生命周期贯穿于定义到整个程序终止。
static int a=0;
2.函数声明(函数原型)
函数只能被定义一次,但可以声明多次。如果一个函数用于不会用到,可以只声明不定义。
函数声明无需函数体,用分号代替即可。可以不写形参,但写上更易于理解。
和变量一样,建议函数在头文件中声明而在源文件中定义。含有函数声明的头文件应该被包含到定义函数的源文件中。
3.分离式编译
编译和链接多个源文件。如果我们只修改了其中一个源文件,只需重新编译那个改动改动了的文件。
分离式编译会产生后缀.obj(windoes)或者.o(UNIX)的文件,后缀名的含义式该文件包含对象代码。
2.参数传递
形参初始化机理和变量初始化一样。相当于用实参给形参赋值。
1.值传递/传值参数
**实参的值被拷贝给形参,函数对形参所做的操作不会影响到实参。**比如有个