20230803 函数传参引用&

本文解释了在C++中定义函数时如何通过传入引用符号`&`来直接修改外部变量的值,讨论了值传递、指针传递和引用传递的区别。
函数传参时带&和不带&存在显著区别,具体表现如下: ### 语言支持方面 标准的C语言不支持引用调用的传参方式,仅支持值传递或指针传递;而C++增加了引用调用的参数传递方式 [^1]。例如在编写纯C语言程序时,若使用&传参可能不符合要求,像写数据结构实验时,若老师要求用纯C语言编写,使用&传参就可能不被认可 [^3]。 ### 传参机制方面 - **不带&的传参**:通常是值传递或指针传递。值传递是将实参的值复制一份给形参,函数对形参的操作不会影响实参;指针传递是将实参的地址传递给形参,通过指针可以间接访问和修改实参所指向的内容,但指针本身的复制不影响实参指针 [^1]。 - **带&的传参**:在C++中,&在函数声明里表示引用。调用函数时直接引用实参,不会生成形参,省略了赋值操作这一步,函数会直接对实参进行操作,从而改变实参的值 [^2]。例如: ```cpp #include <iostream> // 不带&的传参(值传递) void func1(int a) { a = a + 1; } // 带&的传参引用传递) void func2(int &b) { b = b + 1; } int main() { int x = 10; func1(x); std::cout << "After func1, x = " << x << std::endl; // 输出:After func1, x = 10 int y = 10; func2(y); std::cout << "After func2, y = " << y << std::endl; // 输出:After func2, y = 11 return 0; } ``` 在上述代码中,`func1` 采用值传递,函数内部对形参 `a` 的修改不影响实参 `x`;`func2` 采用引用传递,函数内部对形参 `b` 的修改直接影响实参 `y`。 ### 应用场景方面 - **不带&的传参**:当不需要修改实参的值时,可使用值传递;当需要修改实参所指向的内容时,可使用指针传递,如线性表传参需要修改其中内容时传递其地址(*),链表操作时传递二重指针(**) [^3]。 - **带&的传参**:在需要直接修改实参的值,且希望避免指针操作的繁琐时,可使用引用传递。在链表操作中,函数传参 `LNode* &L` 不仅能访问 `L` 所指区域,还能直接修改 `L` 的内容 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值