1.C/C++能返回static修飾的區域變數(因為在靜態存儲區)
2.C/C++能返回用 new 創建的區域變數(因為在堆空間)
3.C/C++能返回指向常量的指標, 但不能返回指向普通區域變數的指標, 否則返回的是亂碼(因為後者創建在棧空間)
4.C/C++能返回區域變數的值
預備知識: 1.當函數結束時, 在棧空間的該函數的普通區域變數會被釋放(清除)。
2.普通的區域變數是在 棧空間 生成的, 所以但程式結束時, 區域變數也會被清空。
1.C/C++能返回static修飾的區域變數(因為在靜態存儲區)
用static 修飾的變數是存儲在靜態存儲區, 而不是棧空間
下面的例子是錯誤的。
C語言C++學習交流496926338
因為 p 相當一個陣列頭指標, 他的內容都是在棧空間的, 所以當 return p後, p是能成功傳出去的, 但其指向的內容已經被棧空間清除了, 因此列印的是亂碼。
而用static修飾後, 就能成功列印出hello world, 因為static修飾, 就表示修飾的物件是創建在靜態存儲區, 不受棧空間影響
C語言C++學習交流496926338
2.C/C++能返回用 new 創建的區域變數(因為在堆空間)
用 new 創建的變數是存儲在 堆空間
C語言C++學習交流496926338
3.C/C++能返回指向常量的指標, 但不能返回指向普通區域變數的指標(因為後者創建在棧空間)
C語言C++學習交流496926338
下面的代碼是指標指向普通區域變數的情況:
C語言C++學習交流496926338
4.C/C++能返回區域變數的值
C語言C++學習交流496926338
喜歡的話關注收藏評論轉發一波 比心麼麼噠!加入我們C語言C++學習交流 壹 496926338群內有大量的專案開發和新手教學視頻千人大群等著你來加入。
在函數返回中,
return 後跟的東西是一定能返回出去的,
這就是 區域變數的返回能值返回的原因,
而位址返回(也就是指標)則看情況,
要看他所指向的地方是否已經被釋放掉。