返回局部变量或临时变量的地址_C++的函数不可以返回局部变量的指针
生活随笔
收集整理的這篇文章主要介紹了
返回局部变量或临时变量的地址_C++的函数不可以返回局部变量的指针
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
很多童鞋在編寫函數返回指針的時候,常常會出現一些列內存錯誤。當然這可能是很多原因造成的,但是有一個原因就是返回的是局部變量的指針。先給出結論C++的函數不可以返回局部變量的指針。
首先要明確局部變量的指針與局部指針變量的區別:局部變量的指針,若非static,則作用域僅為函數本身,在return之后即被釋放,也即指針指向一個無效變量,因此會造成程序崩潰;而局部指針變量則不同,盡管指針變量本身的生命期在return之后也結束,但只要其指向對象有效,其地址也是有效的。因此在返回指針時,一定要確保指針指向的變量是有效的(全局的)。
下面是返回局部變量的指針的例子:
#include <iostream> using namespace std; char* func1() {char str[20] = "hello,world!";char* t1 = str;return t1; } char* func2() {char* t2 = "hello,world!";return t2; } int main() {cout << func2() << endl;cout << func1() << endl;system("pause");return 0; }上面的程序中func2可以輸出結果,func1無法輸出正確的結果。但是由于二者都是返回局部變量的指針,因而都是不對的。那如果我們一定要輸出函數里面定義的變量的指針呢?我們可以將變量定義為靜態類型(static)??梢詫⑸厦娴拇a的func1改寫為:
#include編譯并運行上面的代碼,即可獲得相應的結果。這是因為static類型的變量在程序結束之后才釋放其內存。
總結
以上是生活随笔為你收集整理的返回局部变量或临时变量的地址_C++的函数不可以返回局部变量的指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python优先级排序_Python实现
- 下一篇: s3c2440移植MQTT