📜  C++ 值调用和 引用调用(1)

📅  最后修改于: 2023-12-03 15:13:53.753000             🧑  作者: Mango

C++ 值调用和引用调用

在 C++ 中,函数可以通过值调用和引用调用两种方式进行参数传递。

值调用

值调用是指将参数的值复制一份,然后传递给函数。在函数内部对参数的修改不会影响到函数外部的变量。例如:

#include <iostream>
using namespace std;

void square(int num) {
    num = num * num;
    cout << "The square of " << num << " is " << num << endl;
}

int main() {
    int num = 5;
    square(num);
    cout << "The value of " << num << " is " << num << endl;
    return 0;
}

上述代码将输出:

The square of 25 is 25
The value of 5 is 5

可以看到,在函数 square 中将参数 num 的值平方,但在函数外部得到的 num 的值并没有发生变化。这是因为在值调用时,函数会对传入的值进行拷贝,而这个拷贝与原来的变量是独立的。

引用调用

引用调用是指将变量作为参数传递给函数,函数内部使用的是这个变量的引用,也就是这个变量的别名。在函数内部对参数的修改会反映到函数外部的变量上。例如:

#include <iostream>
using namespace std;

void square(int& num) {
    num = num * num;
    cout << "The square of " << num << " is " << num << endl;
}

int main() {
    int num = 5;
    square(num);
    cout << "The value of " << num << " is " << num << endl;
    return 0;
}

上述代码将输出:

The square of 25 is 25
The value of 25 is 25

可以看到,在函数 square 中将参数 num 的值平方,同时也修改了函数外部的变量 num 的值。这是因为在引用调用时,函数使用了变量的引用,对函数内部的变量的改变会直接影响到函数外部的变量。

区别

值调用和引用调用在参数传递上有明显的区别,其主要表现在以下几个方面:

  • 变量的内存使用:值调用会在函数内部创建一个新的变量,而引用调用会使用原有的变量的内存。
  • 传递方式:值调用会将变量的值复制一份传递给函数,而引用调用会将变量的内存地址传递给函数。
  • 对变量的影响:值调用不会影响原有的变量,而引用调用会影响原有的变量。

因此,在选择参数传递方式时需要根据具体情况进行权衡和选择。一般来说,如果函数需要对参数进行修改或者参数比较大时,建议使用引用调用。如果函数仅仅需要使用参数的值或者参数比较小,可以使用值调用。