Re: [問題] C跟C++一樣有參照的功能嗎?

看板Programming作者 (闇黑貴公子)時間17年前 (2008/08/16 02:39), 編輯推噓4(4010)
留言14則, 8人參與, 最新討論串2/2 (看更多)
※ 引述《mingjen8329 (雙面人 )》之銘言: : 各位大大好,小弟目前用C寫一個程式,想用參照的功能將變數傳遞到函數 : 進而在跳出副函式後可以改變原先所設定的值,(函數間傳遞多個傳回值的問題) : 卻發現有誤,想說會不會是C並沒有像C++一樣有參照的功能。 : (已知可以用傳址的方式處理) : 正在學程式的小嫩嫩懇請板上高手解惑 C 語言並不存在 call by address 和 call by reference 的差異性 應該解釋為 call by pointer 和 call by reference 的差異性 而這兩者都屬於 call by address。 1.C++ Sample (call by reference/address) #include <iostream> using namespace std; void swap (int &a, int &b) { if (&a != &b) a^=b^=a^=b; } int main(void) { int a = 1; int b = 2; cout << "Before : a = " << a << ", b = " << b << endl; swap(a, b); cout << "After : a = " << a << ", b = " << b << endl; } 2.C Sample (call by pointer/address) #include <stdio.h> void swap (int *a, int *b) { if (*a != *b) *a^=*b^=*a^=*b; } int main(void) { int a = 1; int b = 2; printf("Before : a = %d, b = %d\n", a, b); swap(&a, &b); printf("After : a = %d, b = %d\n", a, b); } -- 私が生存への道は 今も未來も唯一つ 私自身の闇黑のためだ 即ち「ハ・ル・ヒ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.168.73

08/16 08:53, , 1F
謝謝大大賜教,很詳盡,讓人一目了然
08/16 08:53, 1F

08/16 11:29, , 2F
pointer其實也是一種value 只是它可以模擬
08/16 11:29, 2F

08/16 11:30, , 3F
reference 但是他依然佔用一個空間存位址
08/16 11:30, 3F

08/16 11:30, , 4F
真正的reference本身並不佔任何空間
08/16 11:30, 4F

08/16 11:30, , 5F
reference就等於是原本的那個變數
08/16 11:30, 5F

08/16 18:36, , 6F
請問這一行a^=b^=a^=b;是什麼意思阿?
08/16 18:36, 6F

08/16 18:55, , 7F
就是數值互換
08/16 18:55, 7F

08/17 03:32, , 8F
自己算,做三次 XOR 之後,數值就會互換了。
08/17 03:32, 8F

08/17 12:32, , 9F
a=b時就掛了
08/17 12:32, 9F

08/19 01:00, , 10F
請人寫比較快。搞這麼多沒意思!
08/19 01:00, 10F

08/19 01:00, , 11F
又是開開玩笑 :p
08/19 01:00, 11F

08/19 02:34, , 12F
哪邊有a=b?? = =
08/19 02:34, 12F

08/19 11:10, , 13F
他應該是說a==b時swap不成立吧
08/19 11:10, 13F
※ 編輯: TKyo 來自: 220.133.168.73 (08/20 01:18)

08/20 01:18, , 14F
謝謝提醒, 加了一行判斷 :)
08/20 01:18, 14F
文章代碼(AID): #18fSriS8 (Programming)
文章代碼(AID): #18fSriS8 (Programming)