日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言的函数中局部变量可以return吗,C语言--返回局部变量的地址

發布時間:2023/12/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言的函数中局部变量可以return吗,C语言--返回局部变量的地址 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們可能會經常寫出這樣的代碼:

int ?add(int ?a , int ?b)

{

return ?a + b;

}

當然,這是合理的寫法,使函數的返回值為 int ,所以,調用函數后會返回一個int型的值。

今天,我想討論的問題當然不是這個,請看下面這段代碼:

char* Func_1(void)

{

char str[30] = "Bruce";

cout<

return str; ? ? //???????

}

這里有問題嗎?不是和上面一樣嗎?

當然不一樣,上面的函數返回的是一個具體值,但是這個函數但會的是一個地址,那么,函數不可以返回地址嗎?當然可以,只是,這里不行。

這里的地址是一個局部變量 str 的地址,我們都知道,局部變量是存儲在棧里的,當函數執行時,其中的局部變量會執行壓棧操作,但是,當函數執行完畢后,棧中的數據會彈出,以便騰出棧空間。

所以,當函數執行完畢后,指針指向的地址當然是存在的,只是它指向的數據已經不在了。

真的是這樣嗎?

下面給出一個例子:

#include

#include

using namespace std;

const char* testValue = "BruceZhang";

char gstr[30] = {0};

char* Func_1(void);

char* Func_2(void);

int main(void)

{

char* func_1;

char* func_2;

func_1 = Func_1();

func_2 = Func_2();

cout<

cout<

system("pause");

return 0;

}

char* Func_1(void)

{

char str[30] = "Bruce";

cout<

return str;

}

char* Func_2(void)

{

strcpy(gstr, testValue);

cout<

return gstr;

}

下面的截圖是在我的電腦上運行的結果:

由此可以看出,應該顯示“Bruce”的地方,顯示的是不能識別的亂碼,由此,驗證了上面的說法。

所以,我們在編寫程序的時候需要注意,返回值如果是值,可以大膽的操作,但是,如如果返回的是地址,那么我們就需要考慮是不是局部自動變量的問題了。

總結

以上是生活随笔為你收集整理的c语言的函数中局部变量可以return吗,C语言--返回局部变量的地址的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。