1. 传值
- 是把实参的值赋值给行参
- 那么对行参的修改,不会影响实参的值
2. 传引用
- 真正的以地址的方式传递参数 ,传递以后,行参和实参都是同一个对象,只是他们名字不同而已
- 对行参的修改将影响实参的值
原理:
被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。
-
值传递(pass-by-value)
-
引用传递(pass-by-reference)
被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。
什么时候要为传入引用参数加上const?
(1)它告诉编译器,这个参数是一个常量,首先你在函数内部不能改变它;
(2)其次,如果在函数内部需要多次引用这个值,CPU不必每次都重新读取,直接使用第一次读取的值(我想应该是存放在寄存器文件中的)。
(3)如果在需要 const 引用时,将形参定 义为普通引用,则会导致const对象和需要类型转换的对象不能调用该函数,会增加函数的局限性