父函数与子函数
在父函數中調用子函數時,要如何使得父函數中的值也改變呢?
我們以常見的數字交換問題來舉例:
如圖所示:在子函數中打印結果正確,
如圖所示,在父函數中打印結果不正確。那么究竟是為什么不正確呢?
原因在于,父函數中a,b的值是10,20傳到子函數中去相當于給子函數的a,b賦值,子函數中a,b的值做了交換并沒有影響到父函數中a,b的值。他們所屬不同的函數中,地址不同,也就不是同一個a和b。
這是我們常用的交換變量值的方法。
那么,指針作為一種存放地址的變量該如何實現變量值的交換呢?
方法一:
很明顯,這種方法是錯誤的。通過調試來尋找原因 通過調試我們發現,問題在于引入了指針后我們只是將指針所保存的地址做了交換,而變量本身的值并沒有交換。 方法二: 程序直接崩潰。 通過調試,我們可以發現在"*tmp=*p1"時錯誤,這是為什么呢?這是因為“*tmp”是一個無法訪問的指針變量,也就是野指針或者叫做懸掛指針。 方法三: 至此,我們終于解決了這個問題,分析程序可以發現,這次是將指針進行了解引用,將兩個指針所對應的變量值進行了交換,而指針所保存的地址并沒有改變,也就最終交換成功。 綜上,我們可以得到在父函數中調用子函數時,子函數的改變要影響父函數,必須: 1、傳指針? 2、解引用。
很明顯,這種方法是錯誤的。通過調試來尋找原因 通過調試我們發現,問題在于引入了指針后我們只是將指針所保存的地址做了交換,而變量本身的值并沒有交換。 方法二: 程序直接崩潰。 通過調試,我們可以發現在"*tmp=*p1"時錯誤,這是為什么呢?這是因為“*tmp”是一個無法訪問的指針變量,也就是野指針或者叫做懸掛指針。 方法三: 至此,我們終于解決了這個問題,分析程序可以發現,這次是將指針進行了解引用,將兩個指針所對應的變量值進行了交換,而指針所保存的地址并沒有改變,也就最終交換成功。 綜上,我們可以得到在父函數中調用子函數時,子函數的改變要影響父函數,必須: 1、傳指針? 2、解引用。
總結
- 上一篇: 引子——漂在中关村 1
- 下一篇: HMM(Forward algorith