[問題] 關於swap()

看板C_and_CPP (C/C++)作者 (paris)時間16年前 (2009/11/03 19:03), 編輯推噓8(8012)
留言20則, 7人參與, 最新討論串1/1
剛剛碰到一個swap問題 題目是int a=4 ,int b=3; 要把值互換成int a=3, int b=4; 但是不可以使用temporary variable 我尚未compile過 但是我寫這樣似乎是錯的... 不知道哪裡錯了 int main() { int a=3,b=4; int *ptr1=&a, *ptr2=&b; swap(ptr1,ptr2); cout<<a<<b; return 0; } int swap(int *i,int *j) { i=j; j=i+1; //我知道這有點牽強...但還是錯了的樣子@@" return; } 還是要改成... *i=*j; *j=*i+1; 這樣不知道行不行? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.49.87

11/03 19:06, , 1F
為什麼是+1?? 還有你知道i/j有*跟沒*各自在做什麼嗎??
11/03 19:06, 1F

11/03 19:08, , 2F
剛才仔細看到不能用temp換, 那給你的提示, XOR可以試試.
11/03 19:08, 2F

11/03 19:31, , 3F
swap a,b=> a=a+b; b=a-b;a=a-b;
11/03 19:31, 3F

11/03 19:34, , 4F
*x=*x-*y ; *y=*x+*y ; *x=*y-*x;
11/03 19:34, 4F

11/03 19:34, , 5F
或 *x^=*y ; *y^=*x ; *x^=*y ;
11/03 19:34, 5F

11/03 19:34, , 6F
前提是 x != y
11/03 19:34, 6F

11/03 19:37, , 7F
你的寫法的問題在於如果a,b不是3和4不就掛了?
11/03 19:37, 7F

11/03 19:39, , 8F
*a ^= *b ^= *a ^= *b;
11/03 19:39, 8F

11/04 01:46, , 9F
我笑了...
11/04 01:46, 9F

11/04 18:59, , 10F
轉二進位 用xor做三次
11/04 18:59, 10F

11/04 19:00, , 11F
x = x XOR y; y = x XOR y; x = XOR y;
11/04 19:00, 11F

11/04 19:44, , 12F
轉二進位這個說法是沒有必要的:)
11/04 19:44, 12F

11/04 20:42, , 13F
喔喔 不用轉直接xor 也可!!!
11/04 20:42, 13F

11/04 20:45, , 14F
如果您在考慮"要不要轉"二進位這件事, 就表示您對變數儲
11/04 20:45, 14F

11/04 20:46, , 15F
存資料的運作與結果並不是很了解; 舉一個簡單的例子, 請
11/04 20:46, 15F

11/04 20:47, , 16F
問用一個int存一個二/八/十/十六進位的數, 需不需要轉換
11/04 20:47, 16F

11/04 20:47, , 17F
:)
11/04 20:47, 17F

11/04 20:49, , 18F
也可以換個問題, 一個char存'A', 存65, 存0x41, 又需不
11/04 20:49, 18F

11/04 20:49, , 19F
要做什麼轉換:)
11/04 20:49, 19F

11/06 14:02, , 20F
傳三個參數進去就好了啊
11/06 14:02, 20F
文章代碼(AID): #1Ay0toVZ (C_and_CPP)
文章代碼(AID): #1Ay0toVZ (C_and_CPP)