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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

返回变量内容的错误示例和正确返回的4种方法

發布時間:2023/12/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 返回变量内容的错误示例和正确返回的4种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正確返回的4種方法:

  • 將要返回的變量設置為全局變量,所以退出函數時不會被銷毀
  • 返回一個局部靜態變量,所以退出函數時不會被銷毀
  • 使用實參獲取變量內容,因為實參是在函數外創建的,所以退出函數時不會被銷毀
  • 使用new申請內存空間,所以退出函數時不會被銷毀

示例程序如下所示:

#include <iostream> #include <string> #include <string.h> using namespace std;//1. 返回(局部)多個數據的引用,數據會出錯 //引用數組的返回類型定義 格式: 類型 (&函數名) [數組個數] typedef int (&pfun2_t) [5]; //不是引用,會報錯 pfun2_t getArray() //getArray為函數名,返回類型為int&[5]-引用的數組 不可以返回指向"棧內存"的指針,因為指向空間在函數結束后將會自動釋放 {int arr[5] = {111,2,3,4,5};cout << "int getArray " << endl;for(int i = 0; i < 5; i++)cout << arr[i] << "\t";cout << endl;return arr; //返回數組(指向"棧內存"的指針,指向空間在函數結束后將會自動釋放) }//2.返回局部結構體,會產生段錯誤 typedef struct student {char name[16];int age; }stu_t; //---- stu_t& getStudent() {stu_t stu = {"zhangsan",22};cout << "in getStudent() : " << stu.name << " " << stu.age << endl;return stu; //返回stu結構體 }//-----------------------------------------------------------------------//解決辦法1:將要返回的變量設置為全局變量,所以退出函數時不會被銷毀 stu_t stu1 = {"lisi",22}; //在創建的時候,結構體才能初始化 stu_t& getStudent1() {cout << "in getStudent1() : " << stu1.name << " " << stu1.age << endl;return stu1; //返回stu結構體 }//解決辦法2:返回一個局部靜態變量,所以退出函數時不會被銷毀 stu_t getStudent2() {static stu_t stu2 = {"wangwu",12};cout << "in getStudent2() : " << stu2.name << " " << stu2.age << endl;return stu2; //返回stu結構體 }//解決辦法3:使用實參獲取變量內容,因為實參是在函數外創建的,所以退出函數時不會被銷毀 stu_t& getStudent3(stu_t &stu3) {strcpy(stu3.name,"zhaosi");stu3.age = 123;cout << "in getStudent3() : " << stu3.name << " " << stu3.age << endl;return stu3; //返回stu結構體 }//解決辦法4:使用new申請內存空間,所以退出函數時不會被銷毀 可以返回指向“堆內存”的指針 stu_t& getStudent4() {stu_t *pstu = new stu_t;strcpy(pstu->name,"liuliu");pstu->age = 233;cout << "in getStudent4() : " << pstu->name << " " << pstu->age << endl;return *pstu; //返回stu結構體 }int main() {//1. 返回多個數據的引用,數據會出錯 #if 1int (&arrref)[5] = getArray();cout << "int main fun" << endl;for(int i = 0; i < 5; i++)cout << arrref[i] << "\t"; //只能正確返回數組第一個數據,其它不會返回cout << endl << endl; #endif#if 0 //2.返回結構體,會產生段錯誤//stu_t temp = getStudent(); //會產生段錯誤,因為雖然返回了指針,但是指針所指向的內存上的數據已經被銷毀//cout << "in main: " << temp.name << " " << temp.age << endl; #endif//---------------------------------------------------------------------------cout << "--------------" << endl << endl;//解決辦法1:將要返回的變量設置為全局變量,所以退出函數時不會被銷毀stu_t temp1 = getStudent1(); //不會發現段錯誤,因為返回的是全局變量,函數結束該變量不會被銷毀cout << "in main: " << temp1.name << " " << temp1.age << endl << endl;//解決辦法2:返回一個局部靜態變量,所以退出函數時不會被銷毀stu_t temp2 = getStudent2(); //不會發現段錯誤,因為返回的是靜態變量,函數結束該變量不會被銷毀cout << "in main: " << temp2.name << " " << temp2.age << endl << endl;//解決辦法3:使用實參獲取變量內容,因為實參是在函數外創建的,所以退出函數時不會被銷毀 stu_t t_stu;stu_t temp3 = getStudent3(t_stu); //不會發現段錯誤,t_stu是在函數外創建的,所以退出函數時不會被銷毀cout << "in main: " << temp3.name << " " << temp3.age << endl << endl;//解決辦法4:使用new申請內存空間,所以退出函數時不會被銷毀stu_t temp4 = getStudent4(); //不會發現段錯誤,因為使用new申請內存空間,所以退出函數時不會被銷毀cout << "in main: " << temp4.name << " " << temp4.age << endl << endl; }

?

轉載于:https://www.cnblogs.com/linuxAndMcu/p/7389961.html

總結

以上是生活随笔為你收集整理的返回变量内容的错误示例和正确返回的4种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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