C++里函数参数传递有3种方式:值传递,指针传递,引用传递
其中值传递大家都很清楚,传递到函数中的值是原值的一个拷贝,在函数内如何修改参数,都不会改变函数外参数的值。比如
void func(int x){
x=x+10;
}
main(){
int i=0;
func(i);
cout<<i<<endl;
}
输出结果仍然是0。
指针传递和引用传递则不然,都会改变外部变量的值。
指针传递使用方式如下:
func(int *i){
*i = *i +10;
}
引用传递使用方式如下:
func(int &i){
i=i+10;
}
上述两种方式函数调用之后,i的值都会变成10;
简单总结,引用传递的使用方式与值传递相同,但效果与指针传递相同
到底引用与指针都有哪些区别,容我一一道来:
1、指针是变量的内存首地址,引用是变量的别名;
2、sizeof指针的大小,就是4字节,sizeof求引用的大小则与引用的变量类型相关;
3、对指针赋值,将使指针指向新的地址,对(*p)赋值时,指针值不变,指针指向的内存空间内容变化;对引用赋值效果与对(*p)赋值相同。
4、指针可以为空,即不指向任何地址,但引用不能为空,在定义的时候就必须绑定到某个变量上。
使用上的区别:
1、如果明确不可能为空值,就使用引用,在函数内部对于引用不需要判断是否为空,代码更简洁。
2、如果需要变换所指向的对象,则需要使用指针,因为引用只能“从一而终”。
3、尽量使用引用而非指针。