
呼叫 addfriend() ,把 startPtr 當成參數傳給 addfriend() ,由於 C 語言採用的是傳值呼叫,因此是把 NULL 拷貝過去,而在 addfriend() 中,假設參數 startPtr 的記憶體位址為 address_b

而後,我們宣告新節點的 newPtr ,假設記憶體位址為 address_c ,還沒指向任何結構 linkedListNode ,因此假設初值也為 NULL

當我們利用標準函數庫中 stdlib.h 的 malloc() ,作業系統給了我們新的記憶體空間,假設位址為 address_d ,這時注意, newPtr 指向這個新的記憶體空間,因此 newPtr 所儲存的值變成 address_d

因為這是第一個新的節點,我們同時將參數 startPtr 的值設定為 address_d

也就是說,程式執行到這裡,記憶體位址在 address_b 、 address_c 的變數都是儲存 address_d 的值。可是這樣影響不到函數 main() 中的 startPtr ,因為 startPtr 的記憶體位置在 address_a

我們在這個例子中加入印出 main() 中 startPtr 的記憶體位址,更可以看出只是傳遞指標給函數,也就是傳遞某個記憶體位址給其他函數,由於 C 語言傳值呼叫的特性,因為都是把變數的值,這裡就是指標變數的值拷貝給 addfriend() ,拷貝後參數的值並不會影響原函數作為呼叫的變數值。
完整的範例程式碼及編譯執行,請參考
嗯,結果都是 0x0 ,因為都是 NULL ,還在想有些前輩高手耳提面命的傳址呼叫嗎?下一個部份我們會做進一步的解釋。
沒有留言:
張貼留言