Min*_*Jia 3 c++ parameters pointers
我已经测试了下面的代码
#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;
}
Run Code Online (Sandbox Code Playgroud)
我知道它应该通过&a和&b交换,并且按预期工作.但是,上述代码似乎也有效.结果是:
a = 5
b = 10
&a = 0x7ffeea1648d8
&b = 0x7ffeea1648d4
a = 10
b = 5
Run Code Online (Sandbox Code Playgroud)
问题是:
如果实施交换功能,为什么没有打印出信息?
如果未实现交换功能,为什么值交换?
您的代码没有按照您的想法执行.要理解,请尝试编译:
void foo(int* x) {}
int main() {
int x = 42;
foo(x);
}
Run Code Online (Sandbox Code Playgroud)
您将收到错误,因为您无法传递int给期望的函数int*.您的代码仍然有效
using namespace std;
Run Code Online (Sandbox Code Playgroud)
因为有一个std::swap(int&,int&)匹配你的电话(因此你不会看到swap你写的错误)和你的
swap(a, b);
Run Code Online (Sandbox Code Playgroud)
实际上调用标准函数.
把它作为一个教训,并尽量避免using namespace std;.这只是您使用它时可能遇到的一个问题.
此外,我建议你使用引用而不是指针.指针可以为null,但如果函数的其中一个参数为null,则交换任何内容都没有意义.使用引用代码看起来更好(主观,但也许你可以同意):
void swap(int& x, int& y){
int temp;
temp = x;
x = y;
y =temp;
}
Run Code Online (Sandbox Code Playgroud)
但是,你不应该首先写一个swap,而是使用std::swap.
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |