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

C++左值引用與指針的區(qū)別及說明

 更新時(shí)間:2025年03月04日 10:09:47   作者:_DCG_  
左值引用與指針的區(qū)別:左值引用是一個(gè)別名,只能綁定左值,對(duì)左值引用的訪問與訪問左值是相同的;指針是一個(gè)變量,該變量在內(nèi)存中存在真是的物理地址,該變量?jī)?nèi)的存儲(chǔ)的是一個(gè)內(nèi)存地址,訪問指針變量對(duì)應(yīng)的內(nèi)容需要配合解訪問符*

C++左值引用與指針的區(qū)別

很多朋友遇到過這個(gè)問題

左值引用與指針有哪些區(qū)別?

腦子里閃過很多答案,但大部分都是各自的定義,真要說他們兩個(gè)有什么區(qū)別,有的時(shí)候還這是說不上來。

本文針對(duì)這個(gè)問題進(jìn)行歸納總結(jié),希望對(duì)大家有所幫助。

先從定義說起

  • 左值引用:左值引用是一個(gè)別名,只能綁定左值,對(duì)左值引用的訪問與訪問左值是相同的
  • 指針:指針是一個(gè)變量,這個(gè)變量在內(nèi)存中存在真是的物理地址,該變量?jī)?nèi)的存儲(chǔ)的是一個(gè)內(nèi)存地址,訪問指針變量對(duì)應(yīng)的內(nèi)容需要配合解訪問符*

看看下面的例子

void rreftTest(int&& ref)
{
    std::cout<<"ref = "<<ref<<std::endl;
}
int main(int argc, char *argv[])
{
    cout<<endl;

    int x = 42;
    int& ref = x;
    int* ptr = &x;
    int&& rref = 4;

    // 輸出地址
    std::cout << "x的地址: " << &x << std::endl;
    std::cout << "ref的地址: " << &ref << std::endl;
    std::cout << "ptr的地址: " << &ptr << std::endl;
    std::cout << "ptr指向的地址: " << ptr << std::endl;
    std::cout << "rref指向的地址: " << rref << std::endl;
    std::cout << "rref指向的地址: " << &rref << std::endl;
    rreftTest(rref);

    // 輸出大小
    std::cout << "引用的大小: " << sizeof(ref) << std::endl;  // 與int相同
    std::cout << "指針的大小: " << sizeof(ptr) << std::endl;  // 通常是4或8字節(jié)

    return 0;
}

//輸出如下所示:
x的地址: 0x63fdbc
ref的地址: 0x63fdbc
ptr的地址:: 0x63fdb0
ptr指向的地址: 0x63fdbc
rref指向的地址: 4
rref指向的地址: 0x63fdec
引用的大小: 4
指針的大小: 8

通過上面的例子得到如下結(jié)論

  1. 左值引用不占用額外內(nèi)存空間,它的地址與引用的左值地址相同;指針則不同,指針需要額外的內(nèi)存空間來存儲(chǔ)地址
  2. 引用必須在定義時(shí)初始化;指針變量可以不在定義時(shí)初始化
  3. 引用初始化綁定左值后,無法再重新綁定左值;指針則可以
  4. 不存在引用的引用,指針則可以

具體的例證程序如下:

//初始化
void initializationDifference() {
    int x = 42;
    
    // 引用必須在聲明時(shí)初始化
    int& ref = x;  // 正確
    int& ref2;     // 錯(cuò)誤!引用必須初始化
    
    // 指針可以后續(xù)初始化
    int* ptr;      // 正確
    ptr = &x;      // 正確
}

void rebindingTest() {
    int x = 42;
    int y = 24;
    
    // 引用一旦綁定就不能改變
    int& ref = x;
    ref = y;    // 這是賦值操作,不是重新綁定
    
    // 指針可以隨時(shí)改變指向
    int* ptr = &x;
    ptr = &y;   // 改變指針指向
}
//重復(fù)引用
void multiLevelTest() {
    int x = 42;
    
    // 不存在引用的引用
    // int& & ref;  // 錯(cuò)誤!
    
    // 可以有多級(jí)指針
    int* ptr = &x;
    int** pptr = &ptr;  // 正確
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言中左移和右移運(yùn)算符詳細(xì)介紹

    C語言中左移和右移運(yùn)算符詳細(xì)介紹

    這篇文章主要介紹了C語言中左移和右移運(yùn)算符詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C語言實(shí)現(xiàn)車輛出租管理系統(tǒng)

    C語言實(shí)現(xiàn)車輛出租管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)車輛出租管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Windows下sentry接入C/C++程序的詳細(xì)過程

    Windows下sentry接入C/C++程序的詳細(xì)過程

    sentry作為一個(gè)開源的軟件,發(fā)展至今,已經(jīng)非常成熟。它支持的平臺(tái)眾多,甚至于針對(duì)不同的工作者(后臺(tái)、前端、客戶端)都有相應(yīng)的內(nèi)容,這篇文章主要介紹了Windows下sentry接入C/C++程序,需要的朋友可以參考下
    2022-09-09
  • C語言猜兇手的代碼實(shí)現(xiàn)

    C語言猜兇手的代碼實(shí)現(xiàn)

    本文主要介紹了C語言猜兇手的代碼實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法示例

    利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法示例

    百馬百擔(dān)是道經(jīng)典的算法題,下面這篇文章主要給大家介紹了利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • C++ 純虛函數(shù)詳解

    C++ 純虛函數(shù)詳解

    本文主要介紹了C++ 純虛函數(shù)詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 一文搞懂C++中string容器的構(gòu)造及使用

    一文搞懂C++中string容器的構(gòu)造及使用

    本文小編將帶大家學(xué)習(xí)最常見的一個(gè)引用類型——string容器,學(xué)習(xí)string容器的構(gòu)造、以及C++API中String類的常用方法,感興趣的可以了解一下
    2022-07-07
  • C語言實(shí)現(xiàn)字符串字符反向排列的方法詳解

    C語言實(shí)現(xiàn)字符串字符反向排列的方法詳解

    這篇文章主要為大家分享了幾種通過C語言實(shí)現(xiàn)字符串字符反向排列(不是逆序打印)的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-05-05
  • C++11新特性之四種類型轉(zhuǎn)換cast說明

    C++11新特性之四種類型轉(zhuǎn)換cast說明

    類型轉(zhuǎn)換是項(xiàng)目中常使用的一種語法規(guī)則,幾乎每個(gè)編程語言都不可避免的涉及到這方面,下面這篇文章主要給大家介紹了關(guān)于C++11新特性之四種類型轉(zhuǎn)換cast說明的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • C++中的復(fù)制構(gòu)造函數(shù)詳解

    C++中的復(fù)制構(gòu)造函數(shù)詳解

    今天小編就為大家分享一篇關(guān)于關(guān)于C++復(fù)制構(gòu)造函數(shù)的實(shí)現(xiàn)講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2021-09-09

最新評(píng)論