关于C ++中的指针和引用的困惑

时间:2012-11-15 17:17:41

标签: c++ pointers reference

我有一堆像这样的代码:

#include <iostream>
using namespace std;

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {

    int a;
    int b;
    a = 7;
    b = 5;
    swap(a, b);
    cout << a << b;

    return 0;
}

此代码执行交换过程,因为我完全想要交换2个数字

但是当我想要用户的两个号码时,如下所示;

int a;
int b;
cin >> a;
cin >> b;
swap(a, b);
cout << a << b;

编译器给出了一个关于整数到*整数错误的错误,这是预期的。为什么第一个代码进行了正确的交换,尽管我没有使用&运算符的方法?

1 个答案:

答案 0 :(得分:57)

在第一个示例中,由于您的std::swap,系统会调用using namespace std。 第二个示例与第一个示例完全相同,因此您可能没有使用。

无论如何,如果你将你的函数重命名为my_swap或类似的东西(并改变每一次出现),那么第一个代码不应该按预期工作。或者,移除using namespace std并明确调用std::cinstd::cout。我会推荐第二个选项。