假设我有以下代码:
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的内存地址作为引用传递给函数。
因为在第一种情况下我传入了值,但在第二种情况下我传入了内存地址,为什么它们会返回相同的值并具有相同的行为?
由于
答案 0 :(得分:0)
(忽略你永远不会为x
和y
分配内存的事实,这是未定义的行为。这假设你做了正确的初始化)
x
指向内存位置(比方说)13
,其值为5
。
y
指向内存位置14
,其值为6
。
当你swap
时(请注意您使用 std::swap
,而不是swap
功能),x
将指向记忆位置14
和y
将指向内存位置13
。所以价值观根本没有改变,只是指向他们的指针。
只会看到他们改变了他们的价值观,但他们没有,他们只是指向其他地方。