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语言--返回局部变量的地址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言控制结构程序设计,第3讲 C语言程
- 下一篇: 苹果 iOS 15.7.4 正式版发布