c++ Primer中這個返回區域性變數的習題為什麼是對的?知乎使用者2014-11-20 19:14:56

arry 是一個指標變數,存的內容是一個地址。

arry 雖然被銷燬了,arry 的值——一個地址——對應的空間內的內容又沒被銷燬。

c++ Primer中這個返回區域性變數的習題為什麼是對的?知乎使用者2014-11-20 21:42:29

arry又不在get的棧幀上,arry說不定就不在棧上。

c++ Primer中這個返回區域性變數的習題為什麼是對的?旺旺2014-11-20 22:03:59

首先,return語句的執行是在區域性變數,引數等被銷燬之前,而且return的是值,所以無論arry, index後來是不是被銷燬了,這個表示式arry[index]的值已經計算出來了,準備好被return了,對吧。

然後問題就變成了,銷燬int *的時候,其所指向的元素會不會被銷燬。答案是顯然不會呀,古往今來洩漏在這個上面的記憶體,估計都數不清了。

所以,綜上所述,arry[index]的值是arry指向的元素之一,而int *的arry被銷燬時並不會銷燬其指向的元素們(因為這是一個傻指標),這個元素也依然安全地活在記憶體中,那無論是返回值還是返回對它的引用,都是安全的。

c++ Primer中這個返回區域性變數的習題為什麼是對的?Zero2015-08-30 23:04:22

首先宣告,我也是個菜鳥!

個人認為,樓主理解錯誤,

arry是指標變數,它接收呼叫它的函數里傳進來的陣列指標!也就是arry自己是個區域性變數指標,並不是它指向的那塊記憶體是區域性呼叫才建立的記憶體,離開子函式時,銷燬的是指標變數arry,並不是銷燬arry指向的那塊兒記憶體!

c++ Primer中這個返回區域性變數的習題為什麼是對的?啊魚2015-09-16 17:55:56

呵呵噠,誰說這返回的是區域性變量了,

arr和index都是區域性變數,但是arr[index]沒有被銷燬,