精華區beta C_and_CPP 關於我們 聯絡資訊
問題(Question): 第9行 printf(" %d %d ", a,b)輸出是?? 不好意思,問題很笨 之前只寫asp C#,最近想學C,但不懂C call by address的概念 請大大指教,感激不盡 程式碼(Code):(請善用置底文網頁, 記得排版) void swap (int *c , int *d){    int temp=*c; //temp=5    *c=*d; //c指標指向的位址的值=10    *d=temp; //d指標指向的位置的值=5 } int main(){    int a=5,b=10;    swap(&a,&b);    printf(" %d %d ", a,b); } 假設 a的[位址,值]=[00x01,5] b的[位址,值]=[00x02,10] ※ 編輯: rim0401 來自: 61.57.32.66 (11/21 11:38)
Feis:c 存 a 的位址, *c 表示 a, 同理 *d 表示 b 11/21 11:37
purincess:temp=*c 是 temp為指標c指到的記憶體位置所存的內容 11/21 11:37
rim0401:所以輸出是? 11/21 11:41
Feis:10 5 阿 11/21 11:43
Laleh:這是call by value吧 有call by address? 11/21 11:51
bigpigbigpig:第3,4行→c才是pointer *c是c指向之記憶體位置的內容 11/21 11:56
bigpigbigpig:*c = *d 的語義絕對不是「指標c變指標d」 :) 11/21 11:57
BlazarArc:C# 不是也有 struct 跟 class 之分嗎? 11/21 14:27
BlazarArc:C++令新手困擾的就是*跟&在宣告跟運算中是不同的意思XD 11/21 14:29
謝謝p大、f大和b大,交換的地方終於懂了 但仍有一個地方越看越怪,第1行何不是void swap (int c , int d){ 如果第1行改void swap (int c , int d){會怎樣? ※ 編輯: rim0401 來自: 61.57.32.66 (11/21 15:34)
BlazarArc:那你在 swap 內的 c d 是一個 copy 版本的 int 11/21 15:35
BlazarArc:不會改到呼叫 swap 所傳的變數內容 11/21 15:36
BlazarArc:所以想要做到 swap 的語意,真正交換變數的值 11/21 15:36
BlazarArc:你要透過 pointer 或者 reference(c++) 來做 11/21 15:37
bigpigbigpig:第1行改成void swap(int c,int d),第8行你會怎麼改? 11/21 16:40
rim0401:單純好奇 如果改第1行 第8行不動會有什麼差異 11/22 13:06
rim0401:所以這是call by address的固定用法 我懂了,謝謝 11/22 13:06
bigpigbigpig:你可以試試看 形式參數與實際引數兩者變數型態不符:) 11/22 13:39
BlazarArc:沒有啥call by address, 不要再誤用了 11/22 14:07
BlazarArc:看一下精華區 z-3-7-9 11/22 14:09
a27417332:C++不是只有reference跟value這兩種東西存在嗎OAO 11/23 14:55
※ 編輯: rim0401 (61.57.32.66), 11/05/2015 08:18:58