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

C++?左值引用與一級指針示例詳解

 更新時間:2022年09月21日 08:31:42   作者:木三百川  
這篇文章主要介紹了C++?左值引用與一級指針,本文給大家介紹了C++?(左值)引用和指針簡介,結(jié)合示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

左值引用用于一級指針時,有以下幾種用法:

//方式一:引用一級指針,常規(guī)用法
int a = 5;
int * pa = &a;
int * &rpa = pa;
 
//方式二:引用指向常量的一級指針,以下幾種為等效表示
int a = 5;
const int * pa = &a;
const int * &rpac = pa; //方式一
int const * &rpac = pa; //方式二
 
//方式三:引用一級指針的常引用,引用自身為常量
int a = 5;
int * pa = &a;
int * const &crpa = pa;
 
//方式四:引用指向常量的一級指針,且引用自身為常量,以下幾種為等效表示
int a = 5;
int * pa = &a;
const int * const &crpac = pa; //方式一
int const * const &crpac = pa; //方式二

在 Microsoft Visual Studio 中連續(xù)多個 const 會被編譯器解釋成一個,即 const const const const int *& 與 const int *& 等效,除此之外,const int const *& 在 Microsoft Visual Studio 中也與 const int *& 等效,而 int *& const 在 QT minGW 中將會報錯,在 Microsoft Visual Studio 中與 int *& 等效。

各類型引用可修改屬性如下表所示:

引用類型修改 *rp修改 rp
int * &rp可以可以
const int * &rp不可以可以
int * const &rp可以不可以
const int * const &rp不可以不可以

若將變量的地址賦予引用(例如 rp=&x),各類型引用可接受的變量地址如下表所示:

引用類型int變量地址const int變量地址
int * &rp不可以不可以
const int * &rp不可以不可以
int * const &rp聲明時可以(將創(chuàng)建臨時變量)不可以
const int * const &rp聲明時可以(將創(chuàng)建臨時變量)聲明時可以(將創(chuàng)建臨時變量)

若將一級指針變量賦予引用(例如 rp=p),各類型引用可接受的一級指針變量如下表所示。若賦值時等號右邊是函數(shù)返回的臨時指針變量(屬于右值),則只有當(dāng)?shù)忍栕筮厼?nbsp;int * const & 以及 const int * const & 類型時不會報錯,此時必會創(chuàng)建臨時變量(與 const 左值引用性質(zhì)一致)。

引用類型int *變量const int *變量int * const變量const int * const變量
int * &rp可以不可以不可以不可以
const int * &rp不可以可以不可以不可以
int * const &rp聲明時可以不可以聲明時可以不可以
const int * const &rp聲明時可以(將創(chuàng)建臨時變量)聲明時可以聲明時可以(將創(chuàng)建臨時變量)聲明時可以

若將引用變量賦予引用(例如 rp=rp2),各類型引用可接受的引用變量如下表所示。比較上下兩表可知,左值引用類型變量被初始化完畢后,若要將其賦值給另一引用變量,賦值時的表現(xiàn)與所引用類型的變量相一致。

引用類型int *&變量const int *&變量int * const&變量const int * const&變量
int * &rp可以不可以不可以不可以
const int * &rp不可以可以不可以不可以
int * const &rp聲明時可以不可以聲明時可以不可以
const int * const &rp聲明時可以(將創(chuàng)建臨時變量)聲明時可以聲明時可以(將創(chuàng)建臨時變量)聲明時可以

補充:C++ (左值)引用和指針簡介

1. 引用

引用(reference):引用指向一個左值,并一直與指向的左值綁定(bind)在一起。用《C++ Primer》里面的話說,引用就是“給對象起了另外一個名字”

int ival = 1024;
int &refVal = ival; // refVal引用ival

引用必須被初始化:引用被聲明后必須被立刻初始化,否則就會報錯

int ival = 1024;
int &refVal = ival; // 順利引用
int &refVal2;?? ??? ?// 報錯,因為沒有初始化

引用無法更改指向的左值:引用一旦經(jīng)過初始化綁定后,就無法更改綁定的對象
引用不是對象:引用只是一個對象的別名,自身不是對象。你對引用的賦值,取值實際上等于對其引用的對象的賦值,取值

int ival = 1024;
int &refVal = ival;
refVal = 2;?? ??? ??? ?// 等于對ival賦值
int ii = refVal;?? ?// 等于將ival的值賦給ii

一個對象多個引用:這是允許的,一個對象可以擁有多個”別名“

int ival = 1024;
int &refVal = ival;
int &refVal2 = ival;?? ?// refVal2作為ival的第二個引用

2. 指針

指針(Pointer):指針用于存儲一個對象的地址,我們稱為“指向”某個對象。通過指針,我們可以訪問到對象在內(nèi)存空間中的地址以及對象本身存儲的值

int *p;?? ?// 定義一個指針

2.1. 獲取地址與訪問對象

利用指針獲取對象地址:由于指針本身是“存儲地址的對象”,我們不能直接讓指針存儲對象本身,這時候就需要用取地址符(&)來提取對象的地址

int ival = 42;
int *p = &ival;?? ??? ?// 讓指針p指向ival的地址

利用指針訪問對象:直接訪問指針的話,得到的是地址。要訪問實際對象,就要用到解引用符(*)。解引用只適用于指向某個對象的有效指針

int ival = 42;
int *p = &ival;
int ival2;        // 新定義整數(shù)類型變量ival2
ival2 = *p;        // 將ival2賦值為p指向的值(也就是ival的值)

2.2. 指針的特殊狀態(tài)

空指針(Null Pointer):一個值為0,不指向任何對象的指針

// 以下三行代碼本質(zhì)相同,都是初始化一個空指針
int *p1 = nullptr;?? ?
int *p2 = 0;
int *p3 = NULL;

未初始化的指針:未指向任何地址,并且也不是空指針的指針是忌使用的。這樣的指針由于指向的位置不確定,訪問時有可能會造成未定義行為(Undefined Behaviour)。所以在定義指針時,一定要進行初始化,即便現(xiàn)在不會立刻使用,也要初始化為空指針

2.3 void* 指針

void類型:void被稱之為“空類型”,它一般被用與沒有返回值的函數(shù)上。
void*指針:一個void類型的指針同樣能指向一塊內(nèi)存地址,但因為類型是空,我們沒有辦法知曉指向的類型,以至于不知道該類型占用的內(nèi)存大小,因此無法訪問指向的對象本身。

3. 引用和指針的復(fù)合使用

引用的引用:不合法。因為引用本身不是對象,所以無法使一個引用綁定另一個引用
引用的指針:不合法。因為引用本身不是對象,所以無法使一個指針指向一個引用
指針的引用:合法。指針本身是對象,引用可以綁定指針

int i = 42;
int *p = &i;
int *&r = p;?? ?// r引用指針p

指針的指針:合法。指針本身是對象,指針可以指向指針

int i = 42;
int *p = &i;?? ?// p指向i
int **p2 = &p;?? ?// p2指向p

std::cout << **p2 << std::endl;?? ?// 兩次解引,輸出“42”

到此這篇關(guān)于C++ 左值引用與一級指針的文章就介紹到這了,更多相關(guān)C++ 左值引用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中的string類型

    C++中的string類型

    這篇文章主要介紹了C++中的string類型,在C++當(dāng)中,除了char 類型,還有專門的字符串類型,就叫做string,下面文字將圍繞其相關(guān)資料展開詳細內(nèi)容,需要的朋友可以參考一下,希望對你有所幫助
    2021-11-11
  • C 語言實現(xiàn)一個簡單的 web 服務(wù)器的原理解析

    C 語言實現(xiàn)一個簡單的 web 服務(wù)器的原理解析

    這篇文章主要介紹了C 語言實現(xiàn)一個簡單的 web 服務(wù)器的原理解析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • C語言實現(xiàn)的統(tǒng)計php代碼行數(shù)功能源碼(支持文件夾、多目錄)

    C語言實現(xiàn)的統(tǒng)計php代碼行數(shù)功能源碼(支持文件夾、多目錄)

    這篇文章主要介紹了C語言實現(xiàn)的統(tǒng)計php代碼行數(shù)功能源碼,支持文件夾、多級目錄的統(tǒng)計,在一些環(huán)境中會用到這個功能,需要的朋友可以參考下
    2014-08-08
  • C++的運算符你真的了解嗎

    C++的運算符你真的了解嗎

    這篇文章主要為大家詳細介紹了C++的運算符,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++ opencv圖像處理實現(xiàn)圖片幾何變換示例

    C++ opencv圖像處理實現(xiàn)圖片幾何變換示例

    這篇文章主要為大家介紹了C++ opencv圖像處理實現(xiàn)圖片幾何變換示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • C++ std::async的使用總結(jié)

    C++ std::async的使用總結(jié)

    這篇文章主要介紹了C++ std::async的使用總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C語言快速排序與二分查找算法示例

    C語言快速排序與二分查找算法示例

    這篇文章主要介紹了C語言快速排序與二分查找算法,涉及C語言隨機數(shù)生成、快速排序及二分查找等算法相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01
  • 指針與const限定符的使用分析

    指針與const限定符的使用分析

    本篇文章對指針與const限定符的使用進行了分析介紹。需要的朋友參考下
    2013-05-05
  • C++?多態(tài)虛函數(shù)的底層原理深入理解

    C++?多態(tài)虛函數(shù)的底層原理深入理解

    這篇文章主要介紹了C++?多態(tài)虛函數(shù)的底層原理深入理解,多態(tài)是在不同繼承關(guān)系的類對象,去調(diào)用同一函數(shù),產(chǎn)生了不同的行為,通常是父類調(diào)用子類的重寫函數(shù),在C++中就是?父類指針指向子類對象,此時父類指針的向下引用就可以實現(xiàn)多態(tài)
    2022-08-08
  • C語言版飛機大戰(zhàn)游戲

    C語言版飛機大戰(zhàn)游戲

    這篇文章主要為大家詳細介紹了C語言版飛機大戰(zhàn)游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12

最新評論

黔西| 仙游县| 巧家县| 博乐市| 嵊泗县| 吉木乃县| 蓬莱市| 兴海县| 临潭县| 镇坪县| 台北县| 读书| 金秀| 五峰| 奉化市| 宁乡县| 湘潭县| 洛宁县| 姜堰市| 涿州市| 高碑店市| 东乡族自治县| 丰台区| 师宗县| 平昌县| 赣榆县| 阳原县| 米泉市| 余江县| 玛曲县| 怀来县| 清流县| 开平市| 和平区| 汤阴县| 正安县| 巢湖市| 普兰县| 云霄县| 乃东县| 涿鹿县|