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

C++超詳細講解引用和指針

 更新時間:2022年06月03日 09:22:26   作者:Bright-SKY  
引用是C++一個很重要的特性,顧名思義是某一個變量或?qū)ο蟮膭e名,對引用的操作與對其所綁定的變量或?qū)ο蟮牟僮魍耆葍r,這篇文章主要給大家總結(jié)介紹了C++中引用的相關(guān)知識點,需要的朋友可以參考下

引用概念

引用的本質(zhì):給已有的變量名 取個別名

//給num取個別名為b
int num =100;
//&不是取b的地址  只是描述b是num的別名   編譯器不會為b開辟新的空間
int &b = num;//num的別名 是b
//操作b等價操作num

定義步驟

1、&修飾別名

2、給哪個變量取別名 就定義哪個變量

3、從上往下 整體替換

案例1:給數(shù)組取別名

int arr[5] ={1,2,3,4,5};
int (&new_arr)[5] = arr;

法一:

void test02()
{
    int arr[5] = {10,20,30,40,50};
    //需求:給arr起個別名
    int (&my_arr)[5] = arr;//my_arr就是數(shù)組arr的別名
    int i=0;
    for(i=0;i<5;i++)
    {
        cout<<my_arr[i]<<" ";
    }
    cout<<endl;
}

法二:配合typedef

void test03()
{
    int arr[5] = {10,20,30,40,50};
    //1、用typedef 給數(shù)組類型 取個別名
    //TYPE_ARR就是一個數(shù)組類型(有5個元素 每個元素位int)
    typedef int TYPE_ARR[5];
    //myArr就是數(shù)組arr的別名
    TYPE_ARR &myArr=arr;
    int i=0;
    for(i=0;i<5;i++)
    {
        cout<<myArr[i]<<" ";
    }
    cout<<endl;
}

引用必須初始化

int &b;//非法的
int num = 10;
int &a = num;
int data = 20;
a = data;//不是data別名為a  而是將data值賦值a(num)

引用初始化后不能更改

引用一旦確定是誰的別名 就不能更改

int num = 10;
int &b = num;
int data = 20;
b=data;//千萬不要認為是b給data取別名 僅僅是將data的值賦值b也就是data賦值num

引用作為函數(shù)的參數(shù)可以替代指針變量

void swap_int01(int a1, int b1)
{
    int tmp  = a1;
    a1 = b1;
    b1 = tmp;
}
void swap_int02(int *a1, int *b1)//a1=&a, b1=&b
{
    //*a1 == a, *b1 == b
    int tmp  = *a1;
    *a1 = *b1;
    *b1 = tmp;
}
void swap_int03(int &a1, int &b1)//int &a1 = a, int &b1=b
{
    //a1 == a, b1 == b
    int tmp  = a1;
    a1 = b1;
    b1 = tmp;
}
void test07()
{
    int a = 10;
    int b = 20;
    cout<<"a = "<<a<<", b = "<<b<<endl;
//    swap_int01(a, b);//交換 不成功
//    swap_int02(&a, &b);//交換 成功
     swap_int03(a, b);//交換 成功
    cout<<"a = "<<a<<", b = "<<b<<endl;
}
int main(int argc, char *argv[])
{
    test07();
    return 0;
}

引用作為函數(shù)的參數(shù)的好處:

1、函數(shù)內(nèi)部 直接通過引用操作外部變量的值

2、省去了指針的操作

3、函數(shù)的形參不會擁有新的空間(節(jié)約了空間)

常引用

int &a = 10;//err
void test08()
{
    //a就叫常引用  不能通過a修改空間的值
    const int &a = 10;//ok
    cout<<"a = "<<a<<endl;//10
}

常引用 一般作為函數(shù)的參數(shù) 防止函數(shù)內(nèi)部修改外部空間值

//常引用 作為函數(shù)的參數(shù) 即節(jié)約了空間 又防止函數(shù)內(nèi)部修改外部變量的值
void printf_num(const int &a)
{
    //a = 1000;//err
    cout<<" num = "<<a<<endl;
}
void test09()
{
    int num = 10;
    printf_num(num);
}

常量的引用:

void test09()
{
    //給常量10取個別名 叫num
    //int &針對的是int ,10是const int類型
    //const int 針對的是const int, 10是const int類型
    const int &num = 10;
    cout<<"num = "<<num<<endl;//10
}

引用作為函數(shù)的返回值類型

當函數(shù)返回值作為左值 那么函數(shù)的返回值類型必須是引用。

(1)、通過函數(shù)返回值 在外界操作 函數(shù)內(nèi)部申請的空間

int& get_data(void)
{
    static int data = 100;
    //不要返回 普通局部變量的 引用
    return data;//返回誰 外界的a就給data取別名
}
void test10()
{
    int &a = get_data();
    cout<<"data = "<<a<<endl;
}

(2)、引用作為函數(shù)的返回值類型 可以完成鏈式操作

引用的本質(zhì)

引用的本質(zhì)在c++內(nèi)部實現(xiàn)是一個指針常量. Type& ref = val; // Type* const ref = &val;

c++編譯器在編譯過程中使用常指針作為引用的內(nèi)部實現(xiàn),因此引用所占用的空間大小與指針相同,只是這個過程是編譯器內(nèi)部實現(xiàn),用戶不可見

引用的本質(zhì):常量指針變量

int num = 10;
int &b = num;//b == num
//底層實現(xiàn)
//b是只讀  *b可讀可寫
int * const b = &num;
//b = 100;
*b = 100;

指針的引用(了解)

new_p就是指針的引用

指針的引用的場景:

void get_memory01(int **p1)//int **p1 = &p
{
    //*p1 == p
    *p1 = (int *)calloc(1, sizeof(int));
    **p1 = 100;
}
void get_memory02(int* &p1)//int* &p1 = p
{
    //p1 == p
    p1 = (int *)calloc(1, sizeof(int));
    *p1 = 100;//*p1 = *p
}
void test13()
{
    int *p = NULL;
    //get_memory01(&p);
    get_memory02(p);
    cout<<"*p = "<<*p<<endl;
}

指針和引用的區(qū)別

1、引用必須被初始化(初始值必須是一個對象),指針不必(但最好要初始化)。

2、引用初始化以后不能被改變,指針可以改變所指的對象。

3、不存在指向空值的引用,但是存在指向空值的指針。

4、指針通過某個指針變量指向一個對象后,對它所指向的變量間接操作。引用本身就是目標變量的別名,對引用的操作就是對目標變量的操作。

5、指針是一個對象,可以定義指向指針的指針。但引用不是對象,沒有實際地址,所以不能定義指向引用的指針,也不能定義指向引用的引用。

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

相關(guān)文章

  • C++基于EasyX框架實現(xiàn)飛機大戰(zhàn)小游戲

    C++基于EasyX框架實現(xiàn)飛機大戰(zhàn)小游戲

    EasyX是針對C/C++的圖形庫,可以幫助使用C/C++語言的程序員快速上手圖形和游戲編程。本文將利用EasyX框架實現(xiàn)飛機大戰(zhàn)小游戲,需要的可以參考一下
    2023-01-01
  • C++實現(xiàn)尋找最低公共父節(jié)點的方法

    C++實現(xiàn)尋找最低公共父節(jié)點的方法

    這篇文章主要介紹了C++實現(xiàn)尋找最低公共父節(jié)點的方法,是數(shù)據(jù)結(jié)構(gòu)中二叉樹的一個經(jīng)典算法,有一定的借鑒價值,需要的朋友可以參考下
    2014-09-09
  • 解析C++編程中virtual聲明的虛函數(shù)以及單個繼承

    解析C++編程中virtual聲明的虛函數(shù)以及單個繼承

    這篇文章主要介紹了C++編程中virtual聲明的虛函數(shù)以及單個繼承,剖析虛函數(shù)和單個基類所能夠繼承的成員,要的朋友可以參考下
    2016-01-01
  • c++ 有趣的動態(tài)轉(zhuǎn)換

    c++ 有趣的動態(tài)轉(zhuǎn)換

    這篇文章主要介紹了c++ 動態(tài)轉(zhuǎn)換的相關(guān)資料,幫助大家更好的理解和使用c++編程,感興趣的朋友可以了解下
    2020-09-09
  • Qt網(wǎng)絡(luò)編程之TCP通信及常見問題

    Qt網(wǎng)絡(luò)編程之TCP通信及常見問題

    這篇文章主要為大家詳細介紹了Qt網(wǎng)絡(luò)編程之TCP通信及常見問題,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言實現(xiàn)學生管理系統(tǒng)

    C語言實現(xiàn)學生管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學生管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C/C++中extern函數(shù)使用詳解

    C/C++中extern函數(shù)使用詳解

    extern可以置于變量或者函數(shù)前,以標示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時在其他模塊中尋找其定義。此外extern也可用來進行鏈接指定
    2022-09-09
  • 深入理解char *a與char a[]的區(qū)別

    深入理解char *a與char a[]的區(qū)別

    很多人可能或多或少知道char *a與char a[]的一些區(qū)別,但如果詳細的說出來卻不知如何說去,下面這篇文章就給大家詳細介紹了關(guān)于C語言中char *a與char a[]的區(qū)別,有需要的朋友們可以參考借鑒,下面來一起學習學習吧。
    2016-12-12
  • 深入理解c++20 concepts

    深入理解c++20 concepts

    本文主要介紹了深入理解c++20 concepts,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • C語言通訊錄管理系統(tǒng)完整代碼

    C語言通訊錄管理系統(tǒng)完整代碼

    這篇文章主要為大家詳細介紹了C語言通訊錄管理系統(tǒng)完整代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論