使用引用改变变量的地址

Changing address of variables using reference

本文关键字:地址 变量 改变 引用      更新时间:2023-10-16

在下面的代码中为什么它显示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)的地址将被改变。这可能吗?

Addresschange函数中,ab为局部变量。当你改变它们的值时,只会改变它们在函数内部的值。因此,您的代码只是在Addresschange函数中交换ab的值。它不使用任何指针操作,所以即使值恰好是指针。这并没有改变它们是按值传递的事实,这意味着改变值不会传播到函数之外。

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

你的函数传递了一个int *(指向int的指针),它允许你改变int的值。例如,*a = 3;将使a在调用者中等于3而不是2,使用由value传递的指针来改变它所指向的对象的值。

(在c++中也可以使用引用。除非使用std::reference_wrapper之类的东西,否则您仍然不能"重新定位"引用以使其引用其他内容。)