一、函数参数传递机制
1.值传递
Ø 调用函数时,实参表达式的值被复制到相应形参标识的对象,并按形参类型强制转换
Ø 函数内对形参的访问、修改,都在形参的标识对象进行
Ø 函数返回时,形参对象被撤消,不影响实参的值
Ø 值传送的实参可以是常量、有确定值的变量或表达式
Ø 函数返回值通过匿名对象传递
Ø C++没有规定在函数调用时实际参数的求值顺序(这里指参数是压栈顺序)
Ø 若实际参数表达式之间有求值关联,同一个程序在不同编译器可能 产生不同的运行结果
1.1默认参数
Ø C++允许指定传值参数的默认值。当函数调用中省略默认参数时,默认值自动传递给被调用函数
Ø 默认参数在函数原型定义
Ø 默认参数放在一般参数之后(最后)
2.指针传递
Ø 形参指针对应的实际参数是地址表达式,即对象的指针
Ø 实际参数把对象的地址值赋给形式参数名标识的指针变量
Ø 被调用函数通过形参指针间接访问实参所指对象
Ø 使用 const限 定指针 可以保护实参对象
const int *p // 不能修改常对象 int const *p // 不能修改常指针
3.引用参数
Ø 引用参数是实参的别名
Ø 只有常引用对应的实参可以是常量或表达式; 非约束的引用参数对应的实参必须是对象名
二、函数返回类型
Ø 函数通过匿名对象返回结果值
Ø 函数值的类型是匿名对象的类型
Ø return 语句把表达式的值赋给匿名对象
Ø 不应该返回局部量的指针 以及 引用
Ø C++函数返回对象引用时,不产生返回实际对象时的副本,返回时的匿名对象是实际返回对象的引用
三、函数指针
Ø函数、应用程序是编译器处理的对象
Ø 每一个函数模块都有一个首地址,称为函数的入口地址, (函数指针)
Ø 函数调用:找到函数入口地址;传递参数
Ø 不带括号的函数名就是函数入口地址