在函數調用時 用指針或者引用做參數,表示把變量的地址傳遞給子函數,但是子函數只能修改指針所指變量的值,并不能修改指針的指向。 如果想用修改指針的指向,就要用指針的指針,或者指針的引用。 大部分情況下,用指針和引用做參數,只是想要修改指針所指變量的值,并沒有想修改指針的指向。 但是如果指針所指的這塊內存在調用子函數結束之后發(fā)生了改變,那就要用指針的引用或者指針的指針。 下面舉幾個典型的例子: 例子一: 鏈表做參數時,其實就是頭結點的指針,在遍歷,查找這種操作做子函數時,鏈表不會發(fā)生改變,那就用頭結點的指針做參數就可以了。 但是在增加,修改,刪除這種操作時,鏈表會發(fā)生改變,這就表示頭結點指針所指的這塊內存會發(fā)生改變,也就是指針的指向可能會發(fā)生改變,這種情況下就要頭指針的引用。 在二叉樹和圖的子函數調用中是同樣的道理,如果子函數會修改二叉樹和圖,那就要用指針的引用。 那塊內存在主函數已經申請好了,但是在子函數中大小變了。 例子二: 在主函數中定義了一個指針,要將這個指針做參數傳給子函數,在子函數中開辟兩兆內存,這個時候一定要用指針的引用。 因為指針所指的這塊內存發(fā)生了改變,或者說指針的指向發(fā)生了改變。 主函數中只是定義了一個指針,并沒有真正開辟內存,子函數中才真正開辟內存,指針指向哪才明確下來。 如果你有時候不清楚該不該用變量的引用做參數,那就記住一點: 用指針的引用總是沒有問題的。因為傳遞變量的地址比傳遞變量本身總是改的快。 |
|