[C++] 為什麼有時候函式的引數要用 double pointers?




如同要在函式裡面改變變數 a 的值時,引數必須為 pointer,然後傳入 &a 一樣。
如果要在函式裡面改變 pointer p 的值,則引數必須為 double pointer,然後傳入 &p。

舉例說明:

輸出結果:
10
20

原因:
其實引數基本上都是傳值呼叫。
在 foo1 裡面,我們有一個 local 的 pointer q。
當呼叫 foo1 時,實際上我們把 p 的內容,拷貝給 q 。所以 q 也指向 i 。
譬如說,&i 的位址假設是 0×1234,p 裡面的內容就是 0×1234。所以呼叫 foo1 的時候,p 的內容被拷給 q,而 p 被丟入 stack 中。

當你改變 q 的值時,p 並沒有受到影響。
所以當程式返回之後,p 的值還是 0×1234。

pointer1

在 foo2 裡面,情況則不一樣。
傳入 foo2 裡面的是 p 的位址。所以當你改變 *q 的時候,會改變 p 的指向。

pointer2




Be the first to comment

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.