我有一堆这样的代码:
#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;
编译器给了我一个关于 int
到 int*
错误的错误,这是预期的。为什么我没有使用带有 &
运算符的方法,但第一个代码进行了正确的交换?
最佳答案
在第一个示例中,调用 std::swap
,因为您的 使用命名空间 std
。
第二个例子和第一个完全一样,所以你可能没有用。
无论如何,如果您将函数重命名为 my_swap
或类似名称(并更改每一次出现),那么第一个代码将无法正常工作,正如预期的那样。或者,删除 using namespace std
并显式调用 std::cin
和 std::cout
。我会推荐第二个选项。
关于c++ - 关于 C++ 中的指针和引用的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13402789/