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

從C語言過渡到C++之引用(別名)

 更新時間:2017年07月29日 16:56:47   作者:天花板  
本文給大家講解的是在從C語言過渡到C++中的引用的區(qū)別及簡單示例,有需要的小伙伴可以參考下


今天要講的是C++中我最喜歡的一個用法——引用,也叫別名。

引用就是給一個變量領(lǐng)取一個變量名,方便我們間接地使用這個變量。我們可以給一個變量創(chuàng)建N個引用,這N + 1個變量共享了同一塊內(nèi)存區(qū)域。

1. 聲明引用

創(chuàng)建引用的格式如下:

數(shù)據(jù)類型 引用名 = 原變量

比如:

int a = 1;
int& b = a;

在這段代碼中,我們給變量a創(chuàng)建了一個別名b。它們公用同一塊內(nèi)存區(qū)域,就是創(chuàng)建變量a時申請的區(qū)域。

注意:由于引用并不需要申請一塊新的內(nèi)存空間,因此在建立引用時只能聲明,不能定義。

面試題中??歼@個知識點,請問下面的代碼是否正確:

int a = 1;
int& b;
b = a;

當然,它是錯的。第二行錯誤,引用在聲明的時候必須指定一個已有的變量,否則編譯器不知道給它分配哪一塊內(nèi)存空間。

2. 引用的特性

前面已經(jīng)提到了,引用唯一的特性就是使用已有的內(nèi)存空間。我們用一段小程序來驗證這個特性。

#include <iostream>

using namespace std;

int main()
{
  int a = 100;
  int &b = a;

  a += 50;
  cout << a << b << endl;

  b += 50;
  cout << a << b << endl;

  return 0;
}

大家可以自己運行一下這段代碼,整個過程中,無論a放生變化還是b發(fā)生變化,a和b的值始終保持一致。

在使用引用時,我們需要注意下面的問題:

引用必須與已有的變量相聯(lián)系引用并不獨立分配內(nèi)存空間 &前有數(shù)據(jù)類型,是引用符號;&前沒有數(shù)據(jù)類型,是取地址符號

比如:int& b = a;和int* p = &a;,前者是引用符號,后者是取地址符號。

可以用引用給另一個引用初始化

復制代碼 代碼如下:
int a = 100; int& b = a; int& c = b;

這段代碼中,b和c都是a的引用。

引用聲明后不能改變引用關(guān)系

int a = 100;
int& b = a;
int& c = b;

這段代碼中,第三行想讓c成為b的引用是辦不到的。它實際實現(xiàn)的功能是把b的值傳遞給了a,c依然是a的引用。因為c一旦聲明為變量a的引用,就不能再修改成變量b的引用了。

ps:這部分之前表述的有問題,感謝大家?guī)臀抑赋觥?/p>

3. 引用作為函數(shù)參數(shù)

這是引用最方便的地方。在學習C語言時,我們知道如果要寫一個變量值交換的函數(shù)需要使用指針,代碼如下:

void swap(int* p1, int* p2)
{
  int temp = *p1;
  *p1 = *p2;
  *p2 = temp;
}

int main()
{
  int a = 1;
  int b = 2;

  printf("a = %d, b = %d\n", a, b);

  swap(&a, &b);

  printf("a = %d, b = %d\n", a, b);
}

這段代碼的執(zhí)行結(jié)果如下:


我們通過swap函數(shù)成功交換了變量a和變量b的值。注意swap(&a, &b);這句話中的&符號是取地址符號。

很多同學不喜歡指針,見到*就恐懼。從今天起,我們可以用引用替代指針的使用。代碼如下:

#include <iostream>

using namespace std;

void swap(int& a, int& b)
{
  int temp = a;
  a = b;
  b = temp;
}

int main()
{
  int a = 1;
  int b = 2;

  printf("a = %d, b = %d\n", a, b);

  swap(a, b);

  printf("a = %d, b = %d\n", a, b);
}

運行一下這段代碼,看看結(jié)果:


結(jié)果完全相同。我們對swap函數(shù)做了修改,通過引用來得到形參的內(nèi)存空間,之后通過引用完成這兩塊內(nèi)存空間值的交換。

需要注意的是,在調(diào)用的時候swap(a, b);只需要進行值傳遞即可。

引用傳參的好處:與值傳遞相比,引用傳遞不用申請新的內(nèi)存空間,特別是在需要傳遞類的對象時,能夠大大降低傳參代來的開銷。

4. 引用的常見錯誤

引用的常見錯誤是C++面試和筆試中的常見問題,總結(jié)如下:

4.1 引用類型不匹配

復制代碼 代碼如下:
int a = 100; void& b = a; float& c = a;

第二行和第三行代碼都會報錯,引用的數(shù)據(jù)類型必須和原始變量類型相同。而且根本不存在void類型的引用。

4.2 不能建立引用數(shù)組

復制代碼 代碼如下:
int array[5] = {0}; int& arr[5] = array;

這種寫法不允許。

5. 最后

對于單個變量的地址傳遞問題,引用可以完美地取代指針。這使我們在設計函數(shù)參數(shù)時更加方便。如果需要限定參數(shù)不被修改,可以結(jié)合const關(guān)鍵字使用。

相關(guān)文章

  • C++實現(xiàn)學生選課系統(tǒng)

    C++實現(xiàn)學生選課系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)學生選課系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 從零開始的Socket編程學習

    從零開始的Socket編程學習

    我們每天打開瀏覽器瀏覽網(wǎng)頁時,瀏覽器的進程怎么與web服務器通信的?QQ進程怎么與服務器或你好友所在的QQ進程通信?這些都得靠socket?那什么是socket?socket的類型有哪些?還有socket的基本函數(shù),下面小編帶大家了解下
    2019-05-05
  • C語言由淺入深講解線程的定義

    C語言由淺入深講解線程的定義

    這篇文章主要介紹了C語言中線程的基礎知識,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • C語言中6組指針和自增運算符結(jié)合方式的運算順序問題

    C語言中6組指針和自增運算符結(jié)合方式的運算順序問題

    本文通過代碼實現(xiàn)分析了6種組合:* p++,(* p)++,* (p++),++* p,++( * p), * (++p),需要的朋友可以參考下
    2015-07-07
  • 教你用Matlab制作立體動態(tài)相冊

    教你用Matlab制作立體動態(tài)相冊

    沒想到吧,MATLAB竟也能制作3D相冊!本文將為大家詳細介紹Matlab制作立體動態(tài)相冊的方法步驟,感興趣的小伙伴可以跟隨小編一起動手試一試
    2022-03-03
  • C/C++的浮點數(shù)在內(nèi)存中的存儲方式分析及實例

    C/C++的浮點數(shù)在內(nèi)存中的存儲方式分析及實例

    這篇文章主要介紹了C/C++的浮點數(shù)在內(nèi)存中的存儲方式分析及實例的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • C語言實現(xiàn)數(shù)組棧的代碼示例

    C語言實現(xiàn)數(shù)組棧的代碼示例

    棧是一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作,進行數(shù)據(jù)插入和刪除操作的一端稱為棧頂,另一端稱為棧底,本文給大家介紹了C語言實現(xiàn)數(shù)組棧的代碼示例,需要的朋友可以參考下
    2024-07-07
  • C++中的幾個特殊符號說明

    C++中的幾個特殊符號說明

    這篇文章主要介紹了C++中的幾個特殊符號說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 純C語言:遞歸組合數(shù)源碼分享

    純C語言:遞歸組合數(shù)源碼分享

    這篇文章主要介紹了純C語言:遞歸組合數(shù)源碼,有需要的朋友可以參考一下
    2014-01-01
  • Qt實現(xiàn)給窗口繪制陰影的示例代碼

    Qt實現(xiàn)給窗口繪制陰影的示例代碼

    這篇文章主要為大家詳細介紹了Qt實現(xiàn)給窗口繪制陰影的方法,文中的示例代碼講解詳細,對我們學習Qt有一定的幫助,感興趣的可以了解一下
    2022-11-11

最新評論

张家口市| 隆子县| 阿拉善右旗| 射阳县| 牙克石市| 陇西县| 五原县| 扶余县| 阿巴嘎旗| 临汾市| 山西省| 南投市| 青海省| 许昌县| 扶余县| 紫云| 大方县| 涟源市| 乳山市| 常宁市| 红原县| 海阳市| 手机| 开阳县| 桦南县| 康马县| 金门县| 屏东县| 佛山市| 宜黄县| 斗六市| 吴江市| 连州市| 朔州市| 周口市| 沙雅县| 芜湖县| 始兴县| 天气| 浙江省| 资兴市|