欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

左值引用用于一級(jí)指針時(shí),有以下幾種用法:

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

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

各類(lèi)型引用可修改屬性如下表所示:

引用類(lèi)型修改 *rp修改 rp
int * &rp可以可以
const int * &rp不可以可以
int * const &rp可以不可以
const int * const &rp不可以不可以

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

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

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

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

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

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

補(bǔ)充:C++ (左值)引用和指針簡(jiǎn)介

1. 引用

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

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

引用必須被初始化:引用被聲明后必須被立刻初始化,否則就會(huì)報(bào)錯(cuò)

int ival = 1024;
int &refVal = ival; // 順利引用
int &refVal2;?? ??? ?// 報(bào)錯(cuò),因?yàn)闆](méi)有初始化

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

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

一個(gè)對(duì)象多個(gè)引用:這是允許的,一個(gè)對(duì)象可以擁有多個(gè)”別名“

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

2. 指針

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

int *p;?? ?// 定義一個(gè)指針

2.1. 獲取地址與訪問(wèn)對(duì)象

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

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

利用指針訪問(wèn)對(duì)象:直接訪問(wèn)指針的話(huà),得到的是地址。要訪問(wèn)實(shí)際對(duì)象,就要用到解引用符(*)。解引用只適用于指向某個(gè)對(duì)象的有效指針

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

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

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

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

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

2.3 void* 指針

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

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

引用的引用:不合法。因?yàn)橐帽旧聿皇菍?duì)象,所以無(wú)法使一個(gè)引用綁定另一個(gè)引用
引用的指針:不合法。因?yàn)橐帽旧聿皇菍?duì)象,所以無(wú)法使一個(gè)指針指向一個(gè)引用
指針的引用:合法。指針本身是對(duì)象,引用可以綁定指針

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

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

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

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

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

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)萬(wàn)年歷源碼

    C語(yǔ)言實(shí)現(xiàn)萬(wàn)年歷源碼

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)萬(wàn)年歷源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++實(shí)現(xiàn)四叉樹(shù)效果(附源碼下載)

    C++實(shí)現(xiàn)四叉樹(shù)效果(附源碼下載)

    這篇文章主要介紹了C++實(shí)現(xiàn)四叉樹(shù)效果(附源碼下載),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • C++ LARGE_INTEGER解析與使用案例詳解

    C++ LARGE_INTEGER解析與使用案例詳解

    這篇文章主要介紹了C++ LARGE_INTEGER解析與使用案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 如何編譯libfreetype方法詳解

    如何編譯libfreetype方法詳解

    libfreetype是為跨平臺(tái)設(shè)計(jì)的,在windows下要編譯的話(huà),可以直接打開(kāi)目錄進(jìn)行編譯,本文將詳細(xì)介紹libfreetype編譯
    2012-11-11
  • C語(yǔ)言深入探索之單鏈表與typedef的用法

    C語(yǔ)言深入探索之單鏈表與typedef的用法

    typedef為C語(yǔ)言的關(guān)鍵字,作用是為一種數(shù)據(jù)類(lèi)型定義一個(gè)新名字,單鏈表是后面要學(xué)的雙鏈表以及循環(huán)鏈表的基礎(chǔ),要想繼續(xù)深入了解數(shù)據(jù)結(jié)構(gòu)以及C語(yǔ)言,我們就要奠定好這塊基石!接下來(lái)就和我一起學(xué)習(xí)吧
    2022-05-05
  • windows消息和消息隊(duì)列實(shí)例詳解

    windows消息和消息隊(duì)列實(shí)例詳解

    這篇文章主要介紹了windows消息和消息隊(duì)列實(shí)例詳解,詳細(xì)講述了Windows的消息機(jī)制與原理,對(duì)于深入理解和學(xué)習(xí)Windows應(yīng)用程序設(shè)計(jì)有不錯(cuò)的借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • 詳解c++優(yōu)先隊(duì)列priority_queue的用法

    詳解c++優(yōu)先隊(duì)列priority_queue的用法

    本文詳細(xì)講解了c++優(yōu)先隊(duì)列priority_queue的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • C語(yǔ)言實(shí)現(xiàn)控制臺(tái)版貪吃蛇游戲

    C語(yǔ)言實(shí)現(xiàn)控制臺(tái)版貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了c語(yǔ)言貪吃蛇控制臺(tái)版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++實(shí)現(xiàn)動(dòng)態(tài)煙花效果

    C++實(shí)現(xiàn)動(dòng)態(tài)煙花效果

    這篇文章主要介紹了利用C++實(shí)現(xiàn)的放煙花程序,用到了EGE圖形庫(kù),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++有一定幫助,需要的可以參考一下
    2022-01-01
  • c++ 面向?qū)ο蟮念?lèi)設(shè)計(jì)

    c++ 面向?qū)ο蟮念?lèi)設(shè)計(jì)

    類(lèi)的設(shè)計(jì)在于用恰到好處的信息來(lái)完整表達(dá)一個(gè)職責(zé)清晰的概念,恰到好處的意思是不多也不少,少了,就概念就不完整;多了,就顯得冗余,累贅,當(dāng)然特例下,允許少許的重復(fù),但是,這里必須要有很好的理由
    2017-07-07

最新評(píng)論