我已经测试了以下代码
#include <iostream>
using namespace std;
void swap(int *x, int *y);
int main() {
int a, b;
a = 5;
b = 10;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "&a = " << &a << endl;
cout << "&b = " << &b << endl;
swap(a, b);
cout << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
void swap(int *x, int *y){
cout << "Hello" << endl;
cout << "x = " << x << endl;
cout << "y = " << y << endl;
int temp;
temp = *x;
*x = *y;
*y =temp;
}
我知道它应该通过&a和&b进行交换,并且可以按预期工作。 但是,上述代码似乎也可以工作。结果是:
a = 5
b = 10
&a = 0x7ffeea1648d8
&b = 0x7ffeea1648d4
a = 10
b = 5
问题是:
如果实现了交换功能,为什么没有打印出任何信息?
如果未实现交换功能,为什么要交换值?
答案 0 :(得分:8)
您的代码没有按照您认为的做。要了解,请尝试将其编译为:
void foo(int* x) {}
int main() {
int x = 42;
foo(x);
}
由于无法将int
传递给需要int*
的函数,将导致错误。由于
using namespace std;
并且因为有一个std::swap(int&,int&)
与您的通话相匹配(因此您不会看到所写的swap
的错误)和
swap(a, b);
实际上调用标准函数。
将其作为课程,并尝试避免使用using namespace std;
。这只是使用时可能遇到的一个问题。
此外,我建议您使用引用而不是指针。指针可以为null,但是如果函数的参数之一为null,则交换任何内容都没有意义。通过引用,代码看起来更好(主观很好,但也许您可以同意):
void swap(int& x, int& y){
int temp;
temp = x;
x = y;
y =temp;
}
但是,您不应该首先编写swap
,而应使用std::swap
。