C ++

可能重复:
通过引用传递还是传递值?
在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};


  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;

}

现在的目标是找出“价值”和“列表”的价值,如果你使用价值传递结果。 (不通过值)。


如果你传值,那么你在方法中复制变量。 这意味着对该变量所做的任何更改都不会发生在原始变量上。 这意味着您的输出将如下所示:

2   1
1   3
2   5

如果你是通过引用传递的,这是传递你的变量的地址(而不是复制),那么你的输出将会不同,并且会反映在swap(int a,int b)中所做的计算。 你运行过这个检查结果吗?

编辑做了一些研究后,我发现了一些事情。 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使用它。 但这是我在搜索过程中发现的。 希望这可以帮助。


改为使用引用作为参数,例如:

void swap(int &a, int &b)
{

  int temp;
    temp = a;
    a = b;
    b = temp;
}

a和b现在将保存实际值。

链接地址: http://www.djcxy.com/p/20653.html

上一篇: c++

下一篇: java: pass