交换两个指针

Mar*_*ars 1 c++ pointers

我正在尝试编写一个将两个指针作为参数的函数,然后使第一个指针指向第二个指针指向的对象,第二个指针指向第一个指针指向的对象。

void swap(int *x, int *y)
{
    int *s;
    s = x;
    x = y;
    y = s;
}
Run Code Online (Sandbox Code Playgroud)

在主函数中,我将执行以下操作

int x, y;
swap(&x, &y);
std::cout << &x << " " << &y << std::endl;
Run Code Online (Sandbox Code Playgroud)

但似乎地址没有改变。

相反,如果我取消引用指针并尝试更改值,则会按预期交换值。我想知道为什么该函数不会更改指针指向的位置。

Jon*_*Jon 5

您的函数按值接受指针,因此返回后将看不到它所做的任何修改。实际上,您正在交换指针副本的值。

  • @Comrade:您当然可以编写`swap(int *&x,int *&y)`,但这仍然不允许您将指针交换到main中的`x`和`y`,因为它们是不可变的(在C ++的说法,“ rvalues”)。它将允许您成功地交换两个可变指针([在此处查看示例](http://ideone.com/f6B70X))。 (2认同)