c++中的传值调用
void func(int num)
{
num++;
}
int main(){
int value=5;
func(value)
cout<<value;//此时输出的value值为5。
return 0;
}
在传值调用时,该段代码中的value值将其值5传给num,num会自动分配一个内存空间,存储值=5,然后进行num++,但在其执行完该函数后,这段内存空间就会自动释放,存储的num值6也无法传递给value,所以输出的value值仍为5。
为了解决这一问题,我们可以通过传地址方式来改变实参,通过传递指针,来间接改变实参。
void func(int *pnum){
(*pnum)++;}
int main()
{
int value=5;
func(&value);
cout<<value;//此时输出的value值为6.
return 0;
在该段代码中func函数传递的说value的地址,所以pnum指针指向的时value的地址,因此改变pnum所指的值就是改变value的值。
当然,我们也可以通过传递引用来直接改变实参的值
int &f(int *pint){
return *pint;}
int main(){
int a=10,b;
b=f(&a)*5;
f(&a)=88;
cout<<b<<" "<<a;//此时输出 50 88
return 0;
需要注意的是,因为返回的引用是一个存储单元,所以函数返回后这个单元的生命期应该不会结束,否则返回值将没有意义。、
更多参考资料