简单地列一下交换两个变量值地几种方法。
1、通过第三方实现,这一种也是最最最常见普通的方法:
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
2、加减法,要注意数据溢出
void swap(int *a, int *b)
{
(*a) += (*b);
(*b) = (*a) - (*b);
(*a) = (*a) - (*b);
}
3、位运算法,适用类型:short、int、long等整型,不适用float、double等浮点型。
void swap(long &a, long &b)
{
a = a^b;
b = a^b;
a = a^b;
}
4、汇编方法,此方法不太适合用于子函数调用,并且不适合VS的x64,只能用于VS的win32项目(有解决方法的)
void swap(int &a, int &b)
{
_asm
{
push a;
push b;
pop a;
pop b;
};
}
void main(int argc, char *argv[])
{
int a = 4.13;
int b = 5.12;
cout << a << "," << b << endl;
swap(a, b);
cout << a << "," << b << endl;
_asm
{
push a;
push b;
pop a;
pop b;
};
cout << a << "," << b << endl;
system("pause");
}
还有很多稀奇古怪乱七八糟天花乱坠令人眼花缭乱赞不绝口骂不出声的方法,这里就不敢继续恭维了....所以,比较推荐第一种,也是最普通的那种方法,因为一个第三方变量对于现在大部分硬件来说,应该,这都不占内存了吧,所以总的来说,我常用第一种,然后偶尔用第二种,第三种和第四种甚至第五第六...感觉就是在无聊炫技(-_-!!!)...
东风知我欲山行,吹断檐间积雨声。
岭上晴云披絮帽,树头初日挂铜钲。
野桃含笑竹篱短,溪柳自摇沙水清。
西崦人家应最乐,煮芹烧笋饷春耕。
身世悠悠我此行,溪边委辔听溪声。
散材畏见搜林斧,疲马思闻卷旆钲。
细雨足时茶户喜,乱山深处长官清。-- 苏轼 《新城道中二首其一》
上善若水,为而不争。