C++ 中按值调用和按引用调用之间的区别
在C++编程中,我们有不同的方法将参数传递给函数,主要是通过值调用和通过引用调用方法。这两种方法的不同之处在于作为参数传递给它们的值的类型。
在研究按值调用和按引用调用方法之前,我们首先需要了解什么是实际参数和形式参数。
实际参数也称为参数,是当我们进行函数调用时传递给函数的参数,而形式参数是我们在函数或方法定义中看到的参数,即函数接收的参数。
C++ 中的按值调用
在按值调用方法中,函数参数通过复制实际参数的值来传递,确保原始值保持不变。该值被复制到形式参数。
按值调用的示例
下面的示例通过更新变量的原始值演示了按值调用的工作原理。
// C++ program to demonstrate call by value |
输出
6
5
说明:在上面的程序中,“number”作为实际参数传递给函数increment,并在函数中作为形式参数“num”传递,用于存储“number”的值。在该函数中,“num”的值增加,但“number”的值没有变化。这就是我们所说的“按值调用”。
C++ 中的引用调用
在引用调用方法中,将实际参数的内存地址(引用)传递给函数,允许直接访问和修改原始值。实参和形参指向同一个内存地址。对函数内参数所做的任何更改都会直接反映在函数外的原始值中。
通过引用调用的示例
下面的示例演示了引用调用的工作原理。
// C++ program to demonstrate the working of call by |
输出
6
6
说明:在上面的代码中,变量“number”被传递给函数increment。形式参数“num”指向与“number”相同的地址。当函数增加参数的值时,“num”中所做的更改会反映在“number”中,正如我们从输出中看到的那样。这就是我们所说的“通过引用调用”。
C++中按值调用和按引用调用的区别
传递值
- 在按值调用方法中,变量的值被传递给函数。
- 在通过引用调用时,传递变量的内存地址。
变更范围
- 在按值调用方法中,即使我们对函数进行更改,原始值也保持不变。
- 在按引用调用方法中,所做的更改反映在原始变量中。
性能
- 按值调用: 复制可能需要额外的内存和时间,因此效率较低。
- 与“按值调用”相比,按引用调用的内存和时间效率更高。
内存位置
- 按值调用: 实参和形参的内存地址不同。
- 按引用调用:实参和形参指向同一个内存地址。
应用领域
- 按值调用: 主要用于小数据传递值或者当我们不想改变原始值时。
- 按引用调用:当我们想要修改原始值或者节省资源时使用它。
结论
通过了解“按值调用”和“按引用调用”这两种参数传递方法的区别,我们可以根据C++程序的具体需求和功能来选择合适的参数传递方法。