一般,参数传递有2种方式,与形参的类型相关,一类是值传递,一类是引用传递,其中,值传递包括一般形参和指针形参。
1、值传递
将实参的值拷贝后赋值给形参,形参与实参是两个独立的对象
1.1、一般值传递
形参是一般类型,对形参的改变不会影响实参。
1.2、指针传递
形参是指针,将实参的指针拷贝赋值给形参,形参和实参是2个独立的指针,但是指向同一个对象。
void fun(int*p){
*p=0;//改变指针指向对象的值
p=0;//改变了ip的局部拷贝,实参并未改变
}
int i=1;
fun(&i);//改变i的值,而非地址
2、引用传递
与一般引用一样,引用形参是它对应实参的别名。对形参的改变就是对实参的改变。
- 使用引用可以避免拷贝
拷贝大的类型对象或容器对象时比较低效,甚至有的类类型根本不支持拷贝操作,此时,只能通过引用形参访问该类型对象。
- 使用引用形参返回额外信息
一个函数只能返回一个值,然而有时候函数需要返回多个值,如何定义函数使得它能返回多个值呢?
一种情况,定义一个新的数据类型作为返回值,另一种就是给函数传入一个额外的引用实参。
建议使用引用类型的形参代替指针