函数
函数定义包括:返回类型、函数名字、由0个或多个形参组成的列表以及函数体
函数调用完成两项工作:
1、用实参初始化函数对应的形参
2、被控制权转移给被调用函数
函数的返回类型不能是数组类型或函数类型,但可以使指向数组或函数的指针
形参和函数内部定义的变量统称为局部变量,同时还会隐藏在外层作用域中同名的其他所有声明
局部静态对象
在程序的执行路径第一次经过对象定义语句时初始化,并且知道程序终止才被销毁,在此期间即使对象所在函数结束执行也不会对它有影响
函数声明(函数原型)
如果一个函数永远也不会被用到,那么它可以只有声明没有定义
函数声明与函数定义类似,区别是函数声明无须函数体,用一个分号代替即可
尽量把声明放到头文件中,把定义放到源文件中
参数传递
传值参数
初始化一个非引用类型的变量,初始值被拷贝给变量。对变量的变动不会影响初始值
指针形参
和其他非引用类型一样,执行指针拷贝操作时,拷贝的是指针的值,即指针的值不会改变,指针所指对象的值会改变
传引用参数
通过使用引用实参,允许函数改变一个或多个实参的值
拷贝大的类类型对象或者容器对象比较低效,甚至有的类类型根本就不支持拷贝操作,当某种类型不支持拷贝操作时,函数只能通过引用型形参访问该类型的对象
引用类型的形参可以作为输出参数,也可作为输入参数,这样就可实现返回多个值的函数
const 形参和实参
当用实参初始化形参时会忽略掉顶层const,所以在函数重载时,const int i = int i
指针或引用形参与 const
可以使用非常量初始化一个底层 const 对象,反过来不行,一个普通的引用必须用同类型对象初始化
尽量使用常量引用
数组形参
不允许拷贝数组、使用数组时通常会将其转换成指针
使用标记指定数组长度
类似字符串以'0'结束
使用标准库规范
传递指向数组首元素和尾后元素的指针
显式传递一个表示数组大小的形参
专门定义一个表示数组大小的形参
main:处理命令行选项
int main(int argc, char *argv[]) {. . .} int main(int argc,