但是如果是要修改指標呢??那就要透過指標的指標來修改
舉例:
void modify(int *p){p = (int*)malloc(sizeof(int*));printf("address of ptr in modify(int*) = %p\n", ptr);}
int main(){int *ptr = NULL;modify(ptr);printf("address of ptr in main() = %p\n", ptr);return 0;}
比較粗心的人可能會覺得應該會印:
-------待補-------------
但是實際上的輸出是這樣:
------------待補------------
其實道理都一樣,如果要改到非自己scope的變數時(不管是不是指標),傳一個星星進去就對了!
為什麼是這樣呢?
我們呼叫function的時候,function會複製一份參數,所以當然傳過去改到的東西就只是在function scope 裡面改而已,想要改到我們原本傳入的參數,必須要傳入他的指標(如果是指標就傳指標的指標,如果是指標的指標就傳指標的指標的指標@@)
這樣function複製的東西就是我們要改的變數的指標了,因此我們可以再透過這個指標來改變他指向的變數
所以上面的程式應該要改成這樣:
void modify(int **p){p = (int*)malloc(sizeof(int*));printf("address of ptr in modify(int*) = %p\n", ptr);}
int main() {
int *ptr = NULL;
modify(&ptr);
printf("address of ptr in main = %p\n", ptr);
return 0;
}
這樣就會是我們想要的結果了!