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

詳解C++中指針和引用的區(qū)別

 更新時間:2019年04月20日 10:22:34   作者:青青胡楊  
這篇文章主要介紹了C++中指針和引用的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1、指針和引用的本質(是什么)

(1)指針是存放內存地址的一種變量,特殊的地方就在它存放的是內存地址。因此,指針的大小不會像其他變量一樣變化,只跟當前平臺相關——不同平臺內存地址的范圍是不一樣的,32位平臺下,內存最大為4GB,因此只需要32bit就可以存下,所以sizeof(pointer)的大小是4字節(jié)。64位平臺下,32位就不夠用了,要想內存地址能夠都一一表示,就需要64bit(但是目前應該沒有這么大的內存吧?),因此sizeof(pointer)是8。
(2)引用的本質是“變量的別名”,就是給變量又重新起了一個名字,既然是“別名”,那么就一定要有本體。

2、聲明和初始化時的區(qū)別

指針指向的是一個內存地址, 因此可以指向一塊為0x00000000的地址,聲明時可以暫時不初始化(不推薦),即pointer = NULL;

引用是變量的別名,別名就一定對應著一個“本名”,因此必須在聲明時就初始化,且不能初始化為空。

3、使用時區(qū)別

(1)根據(jù)聲明和初始化時二者的區(qū)別,指針在聲明周期內隨時可能會為Null,所以使用時一定要做檢查,防止出現(xiàn)空指針、野指針的情況;而引用則不用再操這個心,只要初始化了,在哪里都可以直接使用,再也不用擔心它會不會為空什么的了。
(2)指針因為自己存的是一個內存地址,既然可以存初始化(或者賦值)的地址,那么在指針生命周期內就可以存其他的地址,只要你是同一類型(不同類型這個對應的類型偏移不一樣)的變量,對于指針都OK。

引用作為一個變量AA的別名,在它的整個生命周期內,它只能“從一而終”,始終是第一次初始化它的那個變量的別名,在這期間任何對它的操作,都等同于對變量AA的操作。

Talk is cheap,show you my code.

/** 指針和引用的例子 **/

  std::string s1 = "蘿卜";
  std::string s2 = "青菜";
  std::string s3 = "雞蛋";
  std::string s4 = "西紅柿";
  /** 指針可以初始化為空 **/
  std::string *p_Str = NULL;
  /** 引用一開始必須初始化 **/
  std::string& r_Str = s1;

  p_Str = &s2;
  std::cout<<"我是指針"<<*p_Str<<std::endl; /** 青菜 **/
  std::cout<<"我是引用"<<r_Str<<std::endl; /** 蘿卜 **/
  std::cout<<std::endl;
  std::cout<<"*********分別修改指針和引用***********"<<std::endl;
  /** 分別修改指針和引用 **/
  r_Str = s3; /** 試圖讓r_Str為s3的別名 **/
  p_Str = &s4; /** p_Str重新指向了s4 **/
  
  std::cout<<"我是指針"<<*p_Str<<std::endl; /** 西紅柿 **/
  std::cout<<"我是引用"<<r_Str<<std::endl;  /** 雞蛋 **/
  std::cout<<std::endl;
  std::cout<<"*********查看剛剛的修改對最初初始化的影響***********"<<std::endl;
  /** 貌似成功了,都按照意圖修改了,但是,稍等 **/
  std::cout<<"我是s1"<<s1<<std::endl; /** 雞蛋 ?。?!注意 !?。?**/
  std::cout<<"我是s2"<<s2<<std::endl; /** 青菜 **/
  std::cout<<"我是s3"<<s3<<std::endl; /** 雞蛋 **/
  std::cout<<"我是s4"<<s4<<std::endl; /** 西紅柿 **/

  /** 
  發(fā)現(xiàn)s1 "蘿卜" 被變成了和s3一樣的"青菜",這也說明了任何對引用的操作都等同于操作原先的變量本身
  相比較之下,指針就自由度很高了,想指向誰就指向誰,并不會影響任何之前指向過的變量
  驚不驚喜,意不意外 :)
  **/

4、總結

一個不大恰當?shù)谋扔魇牵羔樉拖袷且粋€可以(注意是可以,但未必一定)到處沾花惹草(可以隨時指向任意地址)的“渣男”;而引用則像是一個只能“從一(誰初始化就跟誰)而終”的“老實人”。

另外,根據(jù)Scott Meyers在《More Effective C++》上所講,只有當你確定需要一開始就初始化,并且不需要再指向其他類型時 使用引用,否則你都應該使用指針。

小弟認識粗鄙淺薄,有不當之處,請大佬輕拍。

以上所述是小編給大家介紹的C++中指針和引用的區(qū)別詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • 紅黑樹的使用詳解

    紅黑樹的使用詳解

    本篇文章是對紅黑樹的使用詳解。需要的朋友參考下
    2013-05-05
  • 深入解析最長公共子串

    深入解析最長公共子串

    本篇文章是對最長公共子串進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言輸入一個數(shù)判斷是否為素數(shù)的多種方法

    C語言輸入一個數(shù)判斷是否為素數(shù)的多種方法

    素數(shù)是只能被1和它自己本身整除,不能被其他自然數(shù)整除的大于1的正整數(shù),下面這篇文章主要給大家介紹了關于C語言輸入一個數(shù)判斷是否為素數(shù)的多種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • C語言實現(xiàn)遞歸版掃雷游戲實例

    C語言實現(xiàn)遞歸版掃雷游戲實例

    大家好,本篇文章主要講的是C語言實現(xiàn)遞歸版掃雷游戲實例,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C語言樹與二叉樹基礎全刨析

    C語言樹與二叉樹基礎全刨析

    二叉樹可以簡單理解為對于一個節(jié)點來說,最多擁有一個上級節(jié)點,同時最多具備左右兩個下級節(jié)點的數(shù)據(jù)結構。本文將詳細介紹一下C中二叉樹與樹的概念和結構,需要的可以參考一下
    2022-04-04
  • MFC對話框中添加狀態(tài)欄的方法

    MFC對話框中添加狀態(tài)欄的方法

    這篇文章主要介紹了MFC對話框中添加狀態(tài)欄的方法,實例分析了MFC對話框添加狀態(tài)欄所涉及的相關成員變量與事件實現(xiàn)技巧,需要的朋友可以參考下
    2015-07-07
  • QT實現(xiàn)文件傳輸功能

    QT實現(xiàn)文件傳輸功能

    這篇文章主要為大家詳細介紹了QT實現(xiàn)文件傳輸功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++ 三種繼承方式及好處示例詳解

    C++ 三種繼承方式及好處示例詳解

    這篇文章主要為大家介紹了C++ 三種繼承方式及好處示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • C語言全面講解順序表使用操作

    C語言全面講解順序表使用操作

    線性表是最簡單的數(shù)據(jù)結構,而順序表又是最簡單的線性表,其基本思想是用一段地址連續(xù)的儲存單元依次存儲線性表的數(shù)據(jù)元素,比如我們常用的一維數(shù)組,下面代碼實現(xiàn)了順序表的定義以及基本操作
    2022-04-04
  • linux下實現(xiàn)的2048游戲示例分享

    linux下實現(xiàn)的2048游戲示例分享

    這篇文章主要介紹了linux下實現(xiàn)的2048游戲示例,需要的朋友可以參考下
    2014-04-04

最新評論

仁怀市| 嘉祥县| 新余市| 镶黄旗| 邛崃市| 秭归县| 西乌| 精河县| 密山市| 辉县市| 嘉兴市| 无棣县| 吉林市| 绍兴县| 泗阳县| 罗定市| 宝山区| 林甸县| 广汉市| 嘉义市| 静宁县| 明光市| 加查县| 湖南省| 石渠县| 越西县| 安国市| 铜山县| 阳西县| 平原县| 惠东县| 海盐县| 石家庄市| 任丘市| 富平县| 新津县| 鄂伦春自治旗| 龙陵县| 石泉县| 辽中县| 饶河县|