局部變量作為函數返回值


char *strA()

{

  char str[] = "hello word";

  return str;

}

上述程序有什么問題?

簡單的來說,str是個局部變量的地址,作為返回值,有可能被提前回收。

那么局部變量可以作為函數的返回值嗎,這個問題不能一概而論。局部變量作為返回值時,一般是系統先申請一個臨時對象存儲局部變量,也就是找個替代品,這樣系統就可以回收局部變量,返回的只是個替代品。

了解完局部變量返回的過程,那么如果返回的是一個基本類型的變量,比如:

int a;

a = 5;

return a;

那么就會有一個臨時對象也等於a的一個拷貝,即5返回,然后a就被銷毀了。盡管a被銷毀了,但它的副本5還是成功地返回了,所以這樣做沒有問題。

那么如果是指針,這么返回就問題很大,因為你返回的局部變量是地址,地址雖然返回了,但地址所指向的內存中的值已經被回收了,你主函數再去調,就有問題了。這個問題也是可以解決的,可以把局部變量變為靜態變量或者全局變量,這樣就不存放在棧中了,而是存放在靜態存儲區,不會被回收。

 

char str[] = "hello word";//分配一個局部變量

char *str= "hello word";//分配一個全局變量


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM