C++教程-C++按值传递和按引用传递
按值传递和按引用传递
在C++语言中,有两种传递值或数据给函数的方式:按值传递(call by value)和按引用传递(call by reference)。按值传递不会修改原始值,而按引用传递会修改原始值。
让我们逐一了解C++语言中的按值传递和按引用传递。
按值传递
按值传递(Call by value)在C++中,不会修改原始值。
在按值传递中,传递给函数的值在函数参数中被局部存储在堆栈内存位置中。如果你改变了函数参数的值,只会对当前函数有效,不会改变调用者方法(如main()函数)内部的变量值。
通过下面的示例来理解C++语言中按值传递的概念:
cppCopy code
#include <iostream>
using namespace std;
void change(int data);
int main()
{
int data = 3;
change(data);
cout << "Value of the data is: " << data << endl;
return 0;
}
void change(int data)
{
data = 5;
}
输出:
Value of the data is: 3
按引用传递
按引用传递(Call by reference)在C++中,原始值会被修改,因为我们传递的是引用(地址)。
在按引用传递中,传递给函数的是值的地址,因此实际参数和形式参数共享相同的地址空间。因此,在函数内部和外部修改的值是相互影响的。
注意:要理解按引用传递,你必须具备指针的基本知识。
通过下面的示例来理解C++语言中按引用传递的概念:
cppCopy code
#include<iostream>
using namespace std;
void swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int main()
{
int x = 500, y = 100;
swap(&x, &y); // 将值传递给函数
cout << "Value of x is: " << x << endl;
cout << "Value of y is: " << y << endl;
return 0;
}
输出:
Value of x is: 100
Value of y is: 500
按值传递和按引用传递在C++中的区别:
编号 | 按值传递 | 按引用传递 |
---|---|---|
1 | 传递给函数的是值的副本 | 传递给函数的是值的地址 |
2 | 函数内部的修改不会反映在其他函数中 | 函数内部的修改会反映在函数的外部 |
3 | 实际参数和形式参数在不同的内存位置中创建 | 实际参数和形式参数在相同的内存位置中创建 |