最新国产好看的视频,伊人天堂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;

當(dāng)然,它是錯的。第二行錯誤,引用在聲明的時候必須指定一個已有的變量,否則編譯器不知道給它分配哪一塊內(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;,前者是引用符號,后者是取地址符號。

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

復(fù)制代碼 代碼如下:
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ù)

這是引用最方便的地方。在學(xué)習(xí)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);這句話中的&符號是取地址符號。

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

#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);只需要進(jìn)行值傳遞即可。

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

4. 引用的常見錯誤

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

4.1 引用類型不匹配

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

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

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

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

這種寫法不允許。

5. 最后

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

相關(guān)文章

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

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

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

    從零開始的Socket編程學(xué)習(xí)

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

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

    這篇文章主要介紹了C語言中線程的基礎(chǔ)知識,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    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相冊!本文將為大家詳細(xì)介紹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ù)組棧的代碼示例

    棧是一種特殊的線性表,其只允許在固定的一端進(jìn)行插入和刪除元素操作,進(jìn)行數(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)給窗口繪制陰影的示例代碼

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

最新評論

兰溪市| 昌吉市| 北碚区| 镇沅| 潼关县| 老河口市| 新沂市| 秦皇岛市| 崇左市| 普兰店市| 太和县| 庆安县| 江永县| 绵阳市| 皋兰县| 南川市| 荔波县| 年辖:市辖区| 高青县| 彭泽县| 淮北市| 司法| 盐津县| 柳州市| 中牟县| 保康县| 滕州市| 广宁县| 绥中县| 宣威市| 潜江市| 迁西县| 平湖市| 循化| 北票市| 巩义市| 昌宁县| 南丹县| 芮城县| 南部县| 元谋县|