问题描述
- 关于swap()的小白提问!
-
#define Swap(x,y) {x=x+y;y=x-y;x=x-y;}
这样子时,如果x和y的地址相等,比如Swap(x,x),最后x的值变成了0,这算为什么呢?
如果取地址void swap(int *x,int *y); 那就没有影响了
解决方案
道理很简单,你这个不是函数,而是一个宏,代码中会用你后面的去替换。
所以会作用到调用swap的地方。
解决方案二:
宏函数就是一个替换:
Swap(x,x)被替换为 {x=x+x;x=x-x;x=x-x;}
所以x就是0了。
解决方案三:
这是我的代码:
#if 1
#include
#define Swap(x,y) {x=x+y;y=x-y;x=x-y;}
using namespace std;
int main()
{
int x = 3, y = 9;
Swap(x, x);
cout << x << y << endl;
return 0;
}
#endif
我解释一下为什么:#define Swap(x,y) {x=x+y;y=x-y;x=x-y;} 这一条语句在程序预处理的时候将Swap(x, y) 替换为x=x+y;y=x-y;x=x-y;这三条语句
具体已经当你调用Swap(x, x);的时候,相当于x=x+x;x=x-x;x=x-x;最后面的一条语句决定了x一定是0.
解决方案四:
首先赞美一下楼主的思路,这种交换数值的方法比较新颖。可我要说的是:就算是正常使用您这个方法,但x和y的值比较大怎么办?比如,x和y都大于int最大值的一半。。。。
解决方案五:
#define的都是简单的宏替换,在预编译就会完成替换
时间: 2024-10-29 04:53:23