作者adrianshum (Alien)
看板C_and_CPP
标题Re: [问题] 副程式更改value
时间Fri Mar 29 08:49:23 2019
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 之类我就不谈了)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 45.64.240.198
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1553820565.A.B6F.html
※ 编辑: adrianshum (45.64.240.198), 03/29/2019 08:50:43
1F:→ aa0917954358: 之前看过类似这样做法 不确定是否打对 a ^= b ^= a 03/29 09:35
2F:→ aa0917954358: ^= b; 03/29 09:35
3F:→ adrianshum: 类似。但一行版本在一expression 对同一 variable 重 03/29 09:39
4F:→ adrianshum: 覆赋值应避免,应该是UB 03/29 09:39
5F:推 LPH66: 一行版确实是 implementation-defined, 参见 #1Deo3lyi 03/29 12:10
6F:→ LPH66: 真要写请写三条: a^=b; b^=a; a^=b; 03/29 12:10
7F:推 aa0917954358: 了解 谢谢! 03/29 12:26
8F:推 s4300026: 用std::swap. XD 03/29 12:33
9F:推 Feis: 印象中 C 语言一行版是 UB 03/29 13:03
10F:推 steve1012: 三个xor没比较好 直接swap 就行了 03/30 12:50