看板 Programming 關於我們 聯絡資訊
※ 引述《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
mingjen8329:謝謝大大賜教,很詳盡,讓人一目了然 219.68.57.242 08/16 08:53
meltice:pointer其實也是一種value 只是它可以模擬 124.29.176.31 08/16 11:29
meltice:reference 但是他依然佔用一個空間存位址 124.29.176.31 08/16 11:30
meltice:真正的reference本身並不佔任何空間 124.29.176.31 08/16 11:30
meltice:reference就等於是原本的那個變數 124.29.176.31 08/16 11:30
wu110011:請問這一行a^=b^=a^=b;是什麼意思阿? 140.124.76.243 08/16 18:36
TKyo:就是數值互換 220.133.168.73 08/16 18:55
H45:自己算,做三次 XOR 之後,數值就會互換了。122.121.180.230 08/17 03:32
wacca:a=b時就掛了220.134.217.250 08/17 12:32
Dungeon:請人寫比較快。搞這麼多沒意思! 220.140.12.237 08/19 01:00
Dungeon:又是開開玩笑 :p 220.140.12.237 08/19 01:00
TKyo:哪邊有a=b?? = = 220.133.168.73 08/19 02:34
Bencrie:他應該是說a==b時swap不成立吧 140.121.197.32 08/19 11:10
※ 編輯: TKyo 來自: 220.133.168.73 (08/20 01:18)
TKyo:謝謝提醒, 加了一行判斷 :) 220.133.168.73 08/20 01:18