Re: [问题] 副程式更改value

楼主: adrianshum (Alien)   2019-03-29 08:49:23
C++ 的话就pass by reference:
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int x,y; //...
swap(x,y);
C 的话一是传address:
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int x,y; //...
swap(&x, &y);
一是写macro (不建议, 后面的随便写,会有不少问题,看看就好)
#define SWAP(a,b) { \
int temp=a; a = b; b = temp; }
int x,y; //...
SWAP(x,y);
(至于应该将会有人提到的如何不靠 temp 做
Swap 之类我就不谈了)
作者: aa0917954358 (Doem)   2019-03-29 09:35:00
之前看过类似这样做法 不确定是否打对 a ^= b ^= a^= b;
楼主: adrianshum (Alien)   2019-03-29 09:39:00
类似。但一行版本在一expression 对同一 variable 重复赋值应避免,应该是UB
作者: LPH66 (-6.2598534e+18f)   2019-03-29 12:10:00
一行版确实是 implementation-defined, 参见 #1Deo3lyi真要写请写三条: a^=b; b^=a; a^=b;
作者: aa0917954358 (Doem)   2019-03-29 12:26:00
了解 谢谢!
作者: s4300026 (s4300026)   2019-03-29 12:33:00
用std::swap. XD
作者: Feis (永远睡不着 @@)   2019-03-29 13:03:00
印象中 C 语言一行版是 UB
作者: steve1012 (steve)   2019-03-30 12:50:00
三个xor没比较好 直接swap 就行了

Links booklink

Contact Us: admin [ a t ] ucptt.com