最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c/c++ 函數(shù)返回指針和引用所引發(fā)的問題

 更新時間:2026年05月22日 09:45:27   作者:java葉新東  
本文主要介紹了c/c++ 函數(shù)返回指針和引用所引發(fā)的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1、函數(shù)返回指針

以下例子中,返回的指針指向的是一個局部變量 a 的地址,當 funcInt 函數(shù)結束時,a 的生命周期也就結束了,a 所占用的內(nèi)存空間將被釋放,此時指針指向的地址不變,但是存儲值是一個未知數(shù),再使用這個指針是未定義的行為,可能會導致程序崩潰或者出現(xiàn)其他異常。

#include "iostream"
// 返回int指針地址
int * funcInt(){
     int a = 101;
    return &a;
}
int main() {
    int *pInt = funcInt();
    std::cout <<"funcInt:" <<*pInt<< std::endl; 
    return 0;
}

打印結果:

funcInt:32760 

通過結果可以看出,結果并不是我們期待的值 101,所以代碼這么寫是有問題的,也是不安全的行為;

解決方案一:使用 static

使用static 表示將這個變量存儲到全局區(qū)(static靜態(tài)區(qū)),此時就不受棧區(qū)管控,當funcInt 函數(shù)執(zhí)行完成后,數(shù)據(jù)依然存在,代碼如下:

#include "iostream"
// 返回int指針地址
int * funcInt(){
    static int a = 101;
    return &a;
}
int main() {
    int *pInt = funcInt();
    std::cout <<"funcInt:" <<*pInt<< std::endl; 
    return 0;
}

解決方案一:使用 動態(tài)分配內(nèi)存 new

動態(tài)分配的內(nèi)存空間,手動釋放后才會清除數(shù)據(jù),代碼如下

// 返回動態(tài)分配內(nèi)存的int指針
int * funcIntNew(){
    int * a = new int(101);
    // 動態(tài)分配的內(nèi)存空間,手動釋放后才會清除數(shù)據(jù)
    return a;
}
int main() {
    int *aNew = funcIntNew();
    std::cout <<"aNew:" <<*aNew<< std::endl;
    delete aNew;//動態(tài)分配的內(nèi)存必須手動釋放
}

2、函數(shù)返回引用

引用和指針是一樣的,因為引用其實就是帶const的指針,

int & funcInt(){
    int a= 100;
    int & a_ref =  a;
    return a_ref;
}

int main() {
    int &i= funcInt();
    std::cout <<"funcInt:" <<i<< std::endl; 
}

打印結果:

funcInt:32760

可以發(fā)現(xiàn),打印的也是不確定的值;并不是我們期待的100,這是因為 返回的指針指向的是一個局部變量 a 的地址,當 funcInt 函數(shù)結束時,a 的生命周期也就結束了,a 所占用的內(nèi)存空間將被釋放,再使用這個指針是未定義的行為,可能會導致程序崩潰或者出現(xiàn)其他異常。

解決方案一:static

// 返回靜態(tài)變量的引用(安全)
int & funcIntStatic(){
   static int a= 100;
   int & a_ref =  a;
   return a_ref;
}

int main() {
    int &i1= funcIntStatic();
   std::cout <<"funcIntStatic:" <<i1<< std::endl; // 打印結果:funcIntStatic:100
}

錯誤示范:使用動態(tài)分配內(nèi)存new

// 返回動態(tài)分配內(nèi)存變量的引用(不安全,未釋放動態(tài)分配的內(nèi)存空間)
int & funcIntNew(){
   int *a= new int(100);
   int & a_ref = *a;
   //delete a; // 一旦釋放,main 函數(shù)中獲取到的值就不確定了,
   return a_ref;
}
int main() {
   int &i2= funcIntNew();
   std::cout <<"funcIntNew:" <<i2<< std::endl; 
}

到此這篇關于c/c++ 函數(shù)返回指針和引用所引發(fā)的問題的文章就介紹到這了,更多相關c++ 函數(shù)返回指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

  • Visual?Studio?2022下載安裝與使用超詳細教程

    Visual?Studio?2022下載安裝與使用超詳細教程

    這篇文章主要介紹了Visual?Studio?2022最新版安裝與使用教程,本文以社區(qū)版為例通過圖文并茂的形式給大家介紹Visual?Studio?2022安裝使用,需要的朋友可以參考下
    2022-04-04
  • C語言實現(xiàn)BMP圖像邊緣檢測處理

    C語言實現(xiàn)BMP圖像邊緣檢測處理

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)BMP圖像邊緣檢測處理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++中`&`符號用法全解析

    C++中`&`符號用法全解析

    在C++里,&有三種不同的含義,你代碼里主要用,主要用于引用和取地址,理解&對于單例模式至關重要,避免復制對象、提升效率,本文逐行解析代碼中所有&的含義、作用用和區(qū)別,幫助你完全掌握,立即查看
    2026-05-05
  • C++中stack、queue、vector的用法詳解

    C++中stack、queue、vector的用法詳解

    本文通過實例代碼給大家介紹了C++中stack、queue、vector的用法,需要的朋友參考下吧
    2017-08-08
  • C語言實現(xiàn)銷售管理系統(tǒng)設計

    C語言實現(xiàn)銷售管理系統(tǒng)設計

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)銷售管理系統(tǒng)設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++取余符號%的實現(xiàn)示例

    C++取余符號%的實現(xiàn)示例

    本文主要介紹了C++取余符號%的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-02-02
  • C語言每日練習之進制轉(zhuǎn)換

    C語言每日練習之進制轉(zhuǎn)換

    這篇文章主要介紹了C語言進制轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-11-11
  • C語言中調(diào)用Swift函數(shù)實例詳解

    C語言中調(diào)用Swift函數(shù)實例詳解

    這篇文章主要介紹了C語言中調(diào)用Swift函數(shù)實例詳解的相關資料,實現(xiàn)該功能可以通過定義全局的指向Blocks的對象指針來實現(xiàn),需要的朋友可以參考下
    2017-07-07
  • C++實現(xiàn)LeetCode(26.有序數(shù)組中去除重復項)

    C++實現(xiàn)LeetCode(26.有序數(shù)組中去除重復項)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(26.有序數(shù)組中去除重復項),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Qt中QAbstractButton::setAutoExclusive設置按鈕自動互斥的實現(xiàn)

    Qt中QAbstractButton::setAutoExclusive設置按鈕自動互斥的實現(xiàn)

    QAbstractButton::setAutoExclusive()方法用于設置按鈕的自動排他性特性,包括基本使用方法、自動排他組規(guī)則和實際應用場景,下面就來介紹一下如何使用,感興趣的可以了解一下
    2026-06-06

最新評論

忻城县| 全州县| 阿图什市| 麦盖提县| 澎湖县| 蒙城县| 桦川县| 萍乡市| 阆中市| 富宁县| 当阳市| 云浮市| 莆田市| 韶关市| 清水河县| 绥德县| 华坪县| 临安市| 东乡县| 且末县| 城固县| 北京市| 商南县| 遵义市| 昔阳县| 乐都县| 湛江市| 漾濞| 汉源县| 青州市| 吴旗县| 韶山市| 方正县| 县级市| 鹤庆县| 新乡县| 栾城县| 桂阳县| 陈巴尔虎旗| 修文县| 聂荣县|