C++ 中常量字符串與字符數組

    首先,思考下面的代碼會輸出什麼呢?

運行一下程序,輸出的結果如下:




爲什麼是這樣的結果呢?也許是剛纔我們的“人品”有點差,居然出現亂碼,嘗試再運行程序一次,結果如下:




爲什麼兩次運行的結果會有不同呢?聰明的你應該知道答案了吧!

是的,在 func 1 函數中 p 是一個指向常量字符串的指針,這串常量字符串在內存中儲存在程序的 text 段(代碼段,數據只能讀不能寫)中,因此當 func1 函數返回指向該字符的指針時,我們能夠利用這個返回的指針訪問到該常量字符串,但是在   func2   函數中 p 是一個字符數組,字符數組的內容是可變的(可在程序中改變某個字符),它在內存中儲存在棧中,當 func2 函數返回時,函數所佔用的棧空間被釋放,即原有的棧空間可以被其他的函數使用,原有的數據將可能被替換爲其他的數據(數據被破壞),此時,利用 func2  函數返回的字符指針去訪問原有的棧空間,雖然可以訪問到原來的空間,但數據已經發生改變了(輸出結果不確定)。

    謝謝閱讀,如有意見和建議,歡迎交流!微笑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章