可能重复:
pass by reference or pass by value?
Pass by Reference / Value in C++
我遇到了pass-by-value-result方法的问题。我理解通过引用传递和传递值,但我不太清楚传值值的结果。通过值有多相似(假设它是相似的)?
这是代码
#include <iostream>
#include <string.h>
using namespace std;
void swap(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int value = 2;
int list[5] = {1, 3, 5, 7, 9};
swap(value, list[0]);
cout << value << " " << list[0] << endl;
swap(list[0], list[1]);
cout << list[0] << " " << list[1] << endl;
swap(value, list[value]);
cout << value << " " << list[value] << endl;
}
现在的目标是找出“值”和“列表”的值是什么,如果你使用pass by value结果。 (不要通过值传递)。
答案 0 :(得分:7)
如果您正在通过值传递,那么您将在方法中复制变量。这意味着对该变量所做的任何更改都不会发生在原始变量上。这意味着您的输出如下:
2 1
1 3
2 5
如果您通过引用传递,即传递变量的地址(而不是复制),那么您的输出将是不同的,并且将反映在swap(int a,int b)中进行的计算。你运行它来检查结果吗?
EDIT 做了一些研究后,我发现了一些东西。 C ++不支持按值传递结果,但可以模拟它。为此,您可以创建变量的副本,通过引用将其传递给函数,然后将原始值设置为临时值。请参阅下面的代码..
#include <iostream>
#include <string.h>
using namespace std;
void swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int value = 2;
int list[5] = {1, 3, 5, 7, 9};
int temp1 = value;
int temp2 = list[0]
swap(temp1, temp2);
value = temp1;
list[0] = temp2;
cout << value << " " << list[0] << endl;
temp1 = list[0];
temp2 = list[1];
swap(list[0], list[1]);
list[0] = temp1;
list[1] = temp2;
cout << list[0] << " " << list[1] << endl;
temp1 = value;
temp2 = list[value];
swap(value, list[value]);
value = temp1;
list[value] = temp2;
cout << value << " " << list[value] << endl;
}
这将为您提供以下结果:
1 2
3 2
2 1
此类传递也称为“复制”,“复制”。 Fortran使用它。但这就是我在搜索过程中发现的全部内容。希望这会有所帮助。
答案 1 :(得分:0)
使用引用作为参数,例如:
void swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
a和b现在将保留实际值。