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

c++超細(xì)致講解引用

 更新時(shí)間:2022年05月09日 09:19:35   作者:panamera12  
引用(reference)就是C++對(duì)C語(yǔ)言的重要擴(kuò)充。引用就是某一變量(目標(biāo))的一個(gè)別名,對(duì)引用的操作與對(duì)變量直接操作完全一樣

C和C++禁止在函數(shù)調(diào)用時(shí)直接傳遞數(shù)組的內(nèi)容,而是強(qiáng)制傳遞數(shù)組指針,而對(duì)于結(jié)構(gòu)體和對(duì)象沒(méi)有這種限制,調(diào)用函數(shù)時(shí)既可以傳遞指針,也可以直接傳遞內(nèi)容;為了提高效率,我曾建議傳遞指針,這樣做在大部分情況下并沒(méi)有什么不妥。

但是在 C++ 中,我們有了一種比指針更加便捷的傳遞聚合類型數(shù)據(jù)的方式,那就是引用

在 C/C++ 中,我們將 char、int、float 等由語(yǔ)言本身支持的類型稱為基本類型,將數(shù)組、結(jié)構(gòu)體、類(對(duì)象)等由基本類型組合而成的類型稱為聚合類型(在講解結(jié)構(gòu)體時(shí)也曾使用復(fù)雜類型、構(gòu)造類型這兩種說(shuō)法)。

引用(Reference)是 C++ 相對(duì)于C語(yǔ)言的又一個(gè)擴(kuò)充。引用可以看做是數(shù)據(jù)的一個(gè)別名,通過(guò)這個(gè)別名和原來(lái)的名字都能夠找到這份數(shù)據(jù)。引用類似于 Windows 中的快捷方式,一個(gè)可執(zhí)行程序可以有多個(gè)快捷方式,通過(guò)這些快捷方式和可執(zhí)行程序本身都能夠運(yùn)行程序;引用還類似于人的綽號(hào)(筆名),使用綽號(hào)(筆名)和本名都能表示一個(gè)人。

引用的定義方式類似于指針,只是用&取代了*,語(yǔ)法格式為:type &name = data;

type 是被引用的數(shù)據(jù)的類型,name 是引用的名稱,data 是被引用的數(shù)據(jù)。引用必須在定義的同時(shí)初始化,并且以后也要從一而終,不能再引用其它數(shù)據(jù),這有點(diǎn)類似于常量(const 變量)。

#include <iostream>
using namespace std;
int main() {
    int a = 99;
    int &r = a;
    cout << a << ", " << r << endl;
    cout << &a << ", " << &r << endl;
    return 0;
}

運(yùn)行結(jié)果:

99, 99

0x28ff44, 0x28ff44

本例中,變量 r 就是變量 a 的引用,它們用來(lái)指代同一份數(shù)據(jù);也可以說(shuō)變量 r 是變量 a 的另一個(gè)名字。從輸出結(jié)果可以看出,a 和 r 的地址一樣,都是0x28ff44;或者說(shuō)地址為0x28ff44的內(nèi)存有兩個(gè)名字,a 和 r,想要訪問(wèn)該內(nèi)存上的數(shù)據(jù)時(shí),使用哪個(gè)名字都行。

注意,引用在定義時(shí)需要添加&,在使用時(shí)不能添加&,使用時(shí)添加&表示取地址。如上面代碼所示,第 6 行中的&表示引用,第 8 行中的&表示取地址。除了這兩種用法,&還可以表示位運(yùn)算中的與運(yùn)算。

由于引用 r 和原始變量 a 都是指向同一地址,所以通過(guò)引用也可以修改原始變量中所存儲(chǔ)的數(shù)據(jù),請(qǐng)看下面的例子:

#include <iostream>
using namespace std;
int main() {
    int a = 99;
    int &r = a;
    cout << a << ", " << r << endl;
    cout << &a << ", " << &r << endl;
    return 0;
}

運(yùn)行結(jié)果:

47, 47

最終程序輸出兩個(gè) 47,可見(jiàn)原始變量 a 的值已經(jīng)被引用變量 r 所修改。

如果讀者不希望通過(guò)引用來(lái)修改原始的數(shù)據(jù),那么可以在定義時(shí)添加 const 限制,形式為:

const type &name = value;

也可以是:

type const &name = value;

這種引用方式為常引用

  • C++引用作為函數(shù)參數(shù)

在定義或聲明函數(shù)時(shí),我們可以將函數(shù)的形參指定為引用的形式,這樣在調(diào)用函數(shù)時(shí)就會(huì)將實(shí)參和形參綁定在一起,讓它們都指代同一份數(shù)據(jù)。如此一來(lái),如果在函數(shù)體中修改了形參的數(shù)據(jù),那么實(shí)參的數(shù)據(jù)也會(huì)被修改,從而擁有“在函數(shù)內(nèi)部影響函數(shù)外部數(shù)據(jù)”的效果。

一個(gè)能夠展現(xiàn)按引用傳參的優(yōu)勢(shì)的例子就是交換兩個(gè)數(shù)的值,請(qǐng)看下面的代碼:

#include <iostream>
using namespace std;
void swap1(int a, int b);
void swap2(int *p1, int *p2);
void swap3(int &r1, int &r2);
int main() {
    int num1, num2;
    cout << "Input two integers: ";
    cin >> num1 >> num2;
    swap1(num1, num2);
    cout << num1 << " " << num2 << endl;
    cout << "Input two integers: ";
    cin >> num1 >> num2;
    swap2(&num1, &num2);
    cout << num1 << " " << num2 << endl;
    cout << "Input two integers: ";
    cin >> num1 >> num2;
    swap3(num1, num2);
    cout << num1 << " " << num2 << endl;
    return 0;
}
//直接傳遞參數(shù)內(nèi)容
void swap1(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}
//傳遞指針
void swap2(int *p1, int *p2) {
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}
//按引用傳參
void swap3(int &r1, int &r2) {
    int temp = r1;
    r1 = r2;
    r2 = temp;
}

運(yùn)行結(jié)果:

Input two integers: 12 34↙

12 34

Input two integers: 88 99↙

99 88

Input two integers: 100 200↙

200 100

本例演示了三種交換變量的值的方法:

1) swap1() 直接傳遞參數(shù)的內(nèi)容,不能達(dá)到交換兩個(gè)數(shù)的值的目的。對(duì)于 swap1() 來(lái)說(shuō),a、b 是形參,是作用范圍僅限于函數(shù)內(nèi)部的局部變量,它們有自己獨(dú)立的內(nèi)存,和 num1、num2 指代的數(shù)據(jù)不一樣。調(diào)用函數(shù)時(shí)分別將 num1、num2 的值傳遞給 a、b,此后 num1、num2 和 a、b 再無(wú)任何關(guān)系,在 swap1() 內(nèi)部修改 a、b 的值不會(huì)影響函數(shù)外部的 num1、num2,更不會(huì)改變 num1、num2 的值。

2) swap2() 傳遞的是指針,能夠達(dá)到交換兩個(gè)數(shù)的值的目的。調(diào)用函數(shù)時(shí),分別將 num1、num2 的指針傳遞給 p1、p2,此后 p1、p2 指向 a、b 所代表的數(shù)據(jù),在函數(shù)內(nèi)部可以通過(guò)指針間接地修改 a、b 的值。

3) swap3() 是按引用傳遞,能夠達(dá)到交換兩個(gè)數(shù)的值的目的。調(diào)用函數(shù)時(shí),分別將 r1、r2 綁定到 num1、num2 所指代的數(shù)據(jù),此后 r1 和 num1、r2 和 num2 就都代表同一份數(shù)據(jù)了,通過(guò) r1 修改數(shù)據(jù)后會(huì)影響 num1,通過(guò) r2 修改數(shù)據(jù)后也會(huì)影響 num2。

從以上代碼的編寫(xiě)中可以發(fā)現(xiàn),按引用傳參在使用形式上比指針更加直觀。引用一般可以代替指針

  • C++引用作為函數(shù)返回值

引用除了可以作為函數(shù)形參,還可以作為函數(shù)返回值,請(qǐng)看下面的例子:

#include <iostream>
using namespace std;
int &plus10(int &r) {
    r += 10;
    return r;
}
int main() {
    int num1 = 10;
    int num2 = plus10(num1);
    cout << num1 << " " << num2 << endl;
    return 0;
}

運(yùn)行結(jié)果:

20 20

在將引用作為函數(shù)返回值時(shí)應(yīng)該注意一個(gè)小問(wèn)題,就是不能返回局部數(shù)據(jù)(例如局部變量、局部對(duì)象、局部數(shù)組等)的引用,因?yàn)楫?dāng)函數(shù)調(diào)用完成后局部數(shù)據(jù)就會(huì)被銷毀,有可能在下次使用時(shí)數(shù)據(jù)就不存在了,C++ 編譯器檢測(cè)到該行為時(shí)也會(huì)給出警告。

到此這篇關(guān)于c++超細(xì)致講解引用的文章就介紹到這了,更多相關(guān)c++引用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 面試常見(jiàn)問(wèn)題之C語(yǔ)言與C++的區(qū)別問(wèn)題

    面試常見(jiàn)問(wèn)題之C語(yǔ)言與C++的區(qū)別問(wèn)題

    在C中,用static修飾的變量或函數(shù),主要用來(lái)說(shuō)明這個(gè)變量或函數(shù)只能在本文件代碼塊中訪問(wèn),而文件外部的代碼無(wú)權(quán)訪問(wèn),今天重點(diǎn)給大家介紹面試中常見(jiàn)的C語(yǔ)言與C++區(qū)別的問(wèn)題,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • C++17中的std::optional的具體使用

    C++17中的std::optional的具體使用

    這篇文章主要介紹了C++17中的std::optional的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Qt實(shí)現(xiàn)拖拽功能圖文教程(支持拖放文件、拖放操作)

    Qt實(shí)現(xiàn)拖拽功能圖文教程(支持拖放文件、拖放操作)

    這篇文章主要給大家介紹了關(guān)于Qt實(shí)現(xiàn)拖拽功能(支持拖放文件、拖放操作)的相關(guān)資料,Qt是一款多平臺(tái)的C++應(yīng)用程序開(kāi)發(fā)框架,它的獨(dú)特之處在于可以快速開(kāi)發(fā)出拖放式的開(kāi)發(fā)桌面程序,需要的朋友可以參考下
    2023-11-11
  • 詳解C++構(gòu)造函數(shù)

    詳解C++構(gòu)造函數(shù)

    這篇文章主要為大家介紹了C++構(gòu)造函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • 總結(jié)一次C++ 程序優(yōu)化歷程

    總結(jié)一次C++ 程序優(yōu)化歷程

    這篇文章主要記錄了一次C++程序優(yōu)化的歷程,給大家優(yōu)化C++程序一些啟發(fā),感興趣的朋友可以了解下
    2020-09-09
  • C++ 中malloc()和free()函數(shù)的理解

    C++ 中malloc()和free()函數(shù)的理解

    這篇文章主要介紹了C++ 中malloc()和free()函數(shù)的理解的相關(guān)資料,這里提供用法示例幫助大家理解這部分知識(shí),需要的朋友可以參考下
    2017-08-08
  • C語(yǔ)言近萬(wàn)字為你講透樹(shù)與二叉樹(shù)

    C語(yǔ)言近萬(wàn)字為你講透樹(shù)與二叉樹(shù)

    樹(shù)是計(jì)算機(jī)算法最重要的非線性結(jié)構(gòu)。因?yàn)闃?shù)能很好地描述結(jié)構(gòu)的分支關(guān)系和層次特性,所以在計(jì)算機(jī)科學(xué)和計(jì)算機(jī)應(yīng)用領(lǐng)域有著廣泛的應(yīng)用。這篇文章我就帶大家一起了解一下樹(shù)、二叉樹(shù)這種結(jié)構(gòu),下篇文章會(huì)重點(diǎn)向大家介紹二叉樹(shù)的遍歷算法
    2022-05-05
  • 淺析C語(yǔ)言頭文件和庫(kù)的一些問(wèn)題

    淺析C語(yǔ)言頭文件和庫(kù)的一些問(wèn)題

    以下是對(duì)C語(yǔ)言中頭文件和庫(kù)的一些問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07
  • C++ Qt開(kāi)發(fā)之使用QProcess實(shí)現(xiàn)進(jìn)程管理

    C++ Qt開(kāi)發(fā)之使用QProcess實(shí)現(xiàn)進(jìn)程管理

    Qt 是一個(gè)跨平臺(tái)C++圖形界面開(kāi)發(fā)庫(kù),利用Qt可以快速開(kāi)發(fā)跨平臺(tái)窗體應(yīng)用程序,本文將重點(diǎn)介紹如何運(yùn)用QProcess組件實(shí)現(xiàn)針對(duì)進(jìn)程的控制管理等,感興趣的可以了解下
    2024-03-03
  • C++使用chrono庫(kù)處理日期和時(shí)間的實(shí)現(xiàn)方法

    C++使用chrono庫(kù)處理日期和時(shí)間的實(shí)現(xiàn)方法

    C++11 中提供了日期和時(shí)間相關(guān)的庫(kù) chrono,通過(guò) chrono 庫(kù)可以很方便地處理日期和時(shí)間,本文主要介紹了C++使用chrono庫(kù)處理日期和時(shí)間的實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評(píng)論

进贤县| 阳信县| 易门县| 哈密市| 东莞市| 江城| 金塔县| 当雄县| 霍山县| 邵阳市| 信阳市| 枞阳县| 南宁市| 昌吉市| 浦东新区| 双流县| 得荣县| 长治县| 缙云县| 章丘市| 图们市| 盐津县| 潮安县| 开化县| 崇礼县| 宁河县| 青海省| 红原县| 遂溪县| 绥芬河市| 沽源县| 垫江县| 嫩江县| 合阳县| 昌邑市| 伊春市| 新宁县| 湘西| 济宁市| 绥芬河市| 申扎县|