本節書摘來自異步社群出版社《從缺陷中學習c/c++》一書中的第6章,第6.6節,作者: 劉新浙 , 劉玲 , 王超 , 李敬娜 , ,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
從缺陷中學習c/c++
代碼示例
現象&結果
函數傳回後,指針pres所指内容不是12。
bug分析
上述代碼中func函數的形參是指針類型 int pres,在函數體中new了一塊記憶體并指派12,将記憶體位址指派給指針pres。在main函數中,定義了指針pint,調用func函數,把pint作為參數傳入func函數中。程式的本意是在func函數退出後,指針pint所指的内容pint為12,但實際結果卻不是。其原因是在func函數調用過程中,形參和實參的傳遞使用了值傳遞方式,這種情況下,形參變量在函數體内發生了變化,在函數結束之後,形參變量随之釋放,不能把變化的結果傳回給實參。要改變實參的值,必須使用指針傳遞或者引用傳遞。在本程式中,func函數的形參是整形指針類型int * pres,要在函數體内改變pres的值,并把這個變化傳回到main函數中,必須傳遞pres的指針。因為pres本身就是指針,是以應該傳遞指針的指針,或者指針的引用。
正确代碼
本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。