传递指针作为参考

时间:2016-07-25 03:22:38

标签: c++

假设我有以下代码:

swap (int&x, int&y)
{
    int temp = x;
    x = y; 
    y = temp;
}
int main()
{
  int* x;
  int* y;

  *x = 5;
  *y = 6;

  swap(*x, *y);

  cout<< *x << *y;

}

输出为:65

因此交换成功。指针x现在指向6,y指向5.

现在,如果我将交换调用更改为:

swap(x, y);

输出仍为:65

我不明白。当我这样做时:

swap(*x, *y);

我引用指针x和y,然后将x和y的值作为引用传递给函数。但是当我这样做时:

swap(x, y);

我没有引用指针x和y,而是将指针x和y的内存地址作为引用传递给函数。

因为在第一种情况下我传入了值,但在第二种情况下我传入了内存地址,为什么它们会返回相同的值并具有相同的行为?

由于

1 个答案:

答案 0 :(得分:0)

(忽略你永远不会为xy分配内存的事实,这是未定义的行为。这假设你做了正确的初始化)

x指向内存位置(比方说)13,其值为5

y指向内存位置14,其值为6

当你swap时(请注意您使用 std::swap ,而不是swap功能),x将指向记忆位置14y将指向内存位置13。所以价值观根本没有改变,只是指向他们的指针。

只会看到他们改变了他们的价值观,但他们没有,他们只是指向其他地方。