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

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

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

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

以下例子中,返回的指針指向的是一個局部變量 a 的地址,當(dāng) funcInt 函數(shù)結(jié)束時,a 的生命周期也就結(jié)束了,a 所占用的內(nèi)存空間將被釋放,此時指針指向的地址不變,但是存儲值是一個未知數(shù),再使用這個指針是未定義的行為,可能會導(dǎo)致程序崩潰或者出現(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;
}

打印結(jié)果:

funcInt:32760 

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

解決方案一:使用 static

使用static 表示將這個變量存儲到全局區(qū)(static靜態(tài)區(qū)),此時就不受棧區(qū)管控,當(dāng)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; 
}

打印結(jié)果:

funcInt:32760

可以發(fā)現(xiàn),打印的也是不確定的值;并不是我們期待的100,這是因為 返回的指針指向的是一個局部變量 a 的地址,當(dāng) funcInt 函數(shù)結(jié)束時,a 的生命周期也就結(jié)束了,a 所占用的內(nèi)存空間將被釋放,再使用這個指針是未定義的行為,可能會導(dǎo)致程序崩潰或者出現(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; // 打印結(jié)果: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; 
}

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

您可能感興趣的文章:

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

峨眉山市| 鄂伦春自治旗| 锡林郭勒盟| 荥阳市| 喜德县| 交口县| 白城市| 肇源县| 额尔古纳市| 郧西县| 望谟县| 怀集县| 和静县| 金阳县| 遂溪县| 聂荣县| 松阳县| 青海省| 太仓市| 兴隆县| 巴南区| 曲周县| 卢氏县| 湟源县| 英山县| 油尖旺区| 宁阳县| 句容市| 云南省| 右玉县| 郧西县| 中西区| 古交市| 浦东新区| 东明县| 读书| 文登市| 佛冈县| 安庆市| 涟水县| 随州市|