函数参数加&与不加&的区别(C/C++)

在C++中,函数参数加上 &(取地址符)和不加 & 的区别涉及到传递参数的方式,即是传值还是传引用。下面是两种情况的区别:

  1. 不加 &(传值):

    • 当你传递参数给函数时,函数接收的是实参的一个副本。
    • 对于基本数据类型(例如整数、浮点数等),这不会有太大问题,因为函数操作的是副本,不会影响原始数据。
    • 但对于复杂数据类型(例如大型结构体或类对象),这可能导致性能开销,因为需要复制整个对象。
     1 void funcWithoutReference(int x) {
     2     x = x * 2;
     3 }
     4 
     5 int main() {
     6     int num = 5;
     7     funcWithoutReference(num);
     8     // num的值仍然是5,没有改变
     9     return 0;
    10 }

     

  2. 加上 &(传引用):

    • 当你加上 & 时,函数接收的是实参的引用,而不是副本。
    • 对于基本数据类型,这允许函数直接修改原始数据。
    • 对于复杂数据类型,传递引用通常更高效,因为不需要复制整个对象。
     1 void funcWithReference(int &x) {
     2     x = x * 2;
     3 }
     4 
     5 int main() {
     6     int num = 5;
     7     funcWithReference(num);
     8     // num的值现在是10,被函数修改了
     9     return 0;
    10 }

总的来说,使用引用可以避免在函数调用时复制大型数据结构,提高性能,并允许函数修改调用者传递的参数。然而,使用引用也需要小心,因为它可能导致意外的副作用,修改了传递给函数的原始数据。选择是根据具体情况和需求而定。

posted @ 2023-11-26 14:21  无主之地主人  阅读(1585)  评论(0)    收藏  举报