使用引用更改变量的地址

时间:2015-05-27 10:29:00

标签: c++

在下面的代码中为什么它显示2,3虽然我们改变了地址。为什么不3,2。

#include <iostream>
using namespace std;

void Addresschange(int *a, int *b)
{
 int *t;
 t = a;
 a = b;
 b = t;
cout << *a<<endl<< *b<<endl;//here its displaying 3,2
}

int main ()
{
  int a = 2 ,b = 3;
  Addresschange(&a ,&b);
  cout << a<<endl<< b;//why its displaying 2,3 here
  return 0;
}

因此,在退出此函数后,将更改实际参数(a和b)的地址。它有可能吗?

1 个答案:

答案 0 :(得分:3)

Addresschange函数中,ab是局部变量。更改其值时,只会更改其在函数内的值。因此,您的代码只会在a函数内交换bAddresschange的值。它没有使用任何指针操作,所以即使值恰好是指针。这并没有改变他们通过价值传递的事实,这意味着改变价值不会传播出函数。

如果要使用指针更改某些值,则必须将指针传递给它并更改指针指向的值。因此,如果您想更改int *的值,则需要将函数传递给int **

您的函数传递int *(指向int的指针),可以更改int的值。例如,*a = 3;将使调用者中的a等于3而不是2,使用按值传递的指针来更改它指向的事物的值。

(你也可以在C ++中使用引用。你仍然可以&#39;#34;重新引用&#34;除非你使用像std::reference_wrapper这样的东西,否则引用它会引用别的东西。)