国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++】C++ 引用詳解 ⑦ ( 指針的引用 )

這篇具有很好參考價值的文章主要介紹了【C++】C++ 引用詳解 ⑦ ( 指針的引用 )。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。





一、二級指針可實現(xiàn)的效果



指針的引用 效果 等同于 二級指針 , 因此這里先介紹 二級指針 ;


使用 二級指針 作為參數(shù) , 可以實現(xiàn)如下功能 :

  • 動態(tài)內(nèi)存管理 : 借助二級指針 , 可以在函數(shù)中分配或釋放內(nèi)存 ; 如 : 創(chuàng)建一個動態(tài)數(shù)組或調(diào)整現(xiàn)有數(shù)組的大小 , 在函數(shù)中需要一個指向指針的指針作為參數(shù) , 以便修改原始指針 ;
void createArray(int **arr, int size) {  
    *arr = malloc(size * sizeof(int));  
}
  • 修改指針的值 : 借助二級指針 , 可以在函數(shù)中修改指針的值 , 即改變它所指向的地址 ; 如果直接傳遞 一級指針 , 函數(shù)只能修改指針指向內(nèi)存中的數(shù)據(jù) , 指針的指向不會改變 ;
void changePointer(int **ptr) {  
    int new_value = 10;  
    *ptr = &new_value;  // 修改指針值 
}
  • 傳遞多維數(shù)組 : C 語言中 , 數(shù)組名本質上是指向數(shù)組第一個元素的指針 , 傳遞多維數(shù)組到函數(shù)中通常需要傳遞一個指向指針的指針 , 即二級指針 ; 借助二級指針 , 函數(shù)可以修改原始數(shù)組的行指針 ;
void process2DArray(int **array, int rows, int cols) {  
    //...  
}




二、指針的引用




1、指針的引用 等同于 二級指針 ( 重點概念 )


普通變量的 引用 , 調(diào)用時可以直接當做 普通變量 使用 , 可實現(xiàn)的功能 相當于 一級指針 ;

  • 普通變量 相當于 零級指針 ;

一級指針的 引用 , 調(diào)用時可以直接當做 一級指針 使用 , 可實現(xiàn)的功能 相當于 二級指針 ;

N 級指針的 引用 , 調(diào)用時可以直接當做 N 級指針 使用 , 可實現(xiàn)的功能 相當于 N + 1 級指針 ;


在 C++ 語言 中 , 使用 引用 時 , C++ 編譯器 會自動將 引用 翻譯為 一級指針 使用 , 自動 在 一級指針 變量 旁邊加上 取地址符號 & 和 取值符號 * ;

指針的引用 就相當于 二級指針 , 其 實現(xiàn)的效果 , 等同于 二級指針 ;

C++ 編譯器 遇到 指針的引用 時 , 會自動將 引用指針 轉為 二級指針 ;



2、引用本質 - 函數(shù)間接賦值簡化版本


使用函數(shù)進行間接賦值 , 需要滿足如下三個條件 :

  • 函數(shù)中定義 指針類型 的 形參 , 調(diào)用函數(shù)時 修改函數(shù)外的 實參 ;
  • 將 實參 取地址 , 傳遞給 函數(shù) ;
  • 在函數(shù)中 , 通過指針修改 實參的值 , 以達到修改外部變量的效果 ;

如果將 函數(shù) 的形參類型 設置為 引用 類型 , 也能達到 間接賦值 的效果 ;

引用 實際上是 把 間接賦值 的三個條件的后兩個條件進行了合并 , C++ 編譯器遇到引用 , 還是需要將 引用 還原為 C 語言中的 取地址 傳入函數(shù) , 在函數(shù)內(nèi)部使用指針訪問實參 ;


3、代碼示例 - 指針的引用


該 函數(shù) 的 參數(shù) 是 一級指針的引用 , 使用該參數(shù)時 可以當做 一級指針使用 , 其效果 等同于 二級指針 ; 其效果等同于上一篇博客 【C++】C++ 引用詳解 ⑥ ( 普通變量 / 一級指針 / 二級指針 做函數(shù)參數(shù)的作用 ) 中的 int getStudent(Student** stu) 函數(shù) ;

// 參數(shù)是 一級指針的引用 
// 該參數(shù) 是 一級指針的引用 
// 使用該參數(shù)時 可以當做 一級指針使用
// 其效果 等同于 二級指針
int getStudent(Student*& p)

調(diào)用該 一級指針 的 引用 , 可以直接訪問 一級指針 , 不需要使用 * 符號 ;

因此 這里 直接為 一級指針 進行內(nèi)存分配 ;

如果此處是二級指針 , 需要先試用 * 符號 取出二級指針指向的一級指針 , 然后再為該 一級指針 分配內(nèi)存 ;

    // 為形參中聲明的 Student* 指針的引用 分配內(nèi)存
    // 一維指針的引用 相當于直接訪問一維指針 
    // 相當于為 main 函數(shù)中的 Student* stu 變量賦值
    p = (Student*)malloc(sizeof(Student));
    // 如果傳入的是二維指針參數(shù) Student** p
    // 上述操作等同于
    // *p = (Student*)malloc(sizeof(Student));

代碼示例 :

// 導入標準 io 流頭文件 其中定義了 std 命名空間
#include <iostream>
// 導入 std 命名空間
using namespace std;

struct Student
{
    char name[64];
    int age;
};

// 參數(shù)是 指針的引用 
// 該參數(shù) 是 一級指針的引用 
// 使用該參數(shù)時 可以當做 一級指針使用
// 其效果 等同于 二級指針
int getStudent(Student*& p)
{
    // 為形參中聲明的 Student* 指針的引用 分配內(nèi)存
    // 一維指針的引用 相當于直接訪問一維指針 
    // 相當于為 main 函數(shù)中的 Student* stu 變量賦值
    p = (Student*)malloc(sizeof(Student));
    // 如果傳入的是二維指針參數(shù) Student** p
    // 上述操作等同于
    // *p = (Student*)malloc(sizeof(Student));

    if (p == NULL)
    {
        // 分配內(nèi)存失敗 , 返回錯誤碼 2
        return 2;
    }

    // 設置結構體成員值
    p->age = 18;

    // 執(zhí)行成功
    return 0;
}

int main() {
    // 聲明 Student 對象
    Student* stu = NULL;

    // 調(diào)用函數(shù) 將二級指針傳入函數(shù) 
    // 在函數(shù)內(nèi)部創(chuàng)建 Student 對象
    getStudent(stu);

    // 打印結構體成員
    printf("stu->age = %d\n", stu->age);


    // 控制臺暫停
    system("pause");

    return 0;
}

執(zhí)行結果 :

stu->age = 18
請按任意鍵繼續(xù). . .

【C++】C++ 引用詳解 ⑦ ( 指針的引用 ),C++,c++,C,引用,指針,指針引用,原力計劃文章來源地址http://www.zghlxwxcb.cn/news/detail-676131.html

到了這里,關于【C++】C++ 引用詳解 ⑦ ( 指針的引用 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • C++【4】指針與引用;數(shù)組指針;指針數(shù)組

    /* ?? ?指針變量作為函數(shù)參數(shù) ?? ??? ?函數(shù)的參數(shù)可以是指針類型,它的作用是將一個變量的地址傳送到另一個函數(shù)中。 ?? ??? ?指針變量作為函數(shù)參數(shù)與變量本身作為函數(shù)參數(shù)不同,變量作函數(shù)參數(shù)傳遞的是具體值。 ?? ??? ?而指針作為函數(shù)參數(shù)傳遞的是內(nèi)存的地址

    2024年02月07日
    瀏覽(18)
  • C++的指針和引用

    C++中內(nèi)存單元內(nèi)容和地址 內(nèi)存由很多的內(nèi)存單元組成,這些內(nèi)存單元用于存放各種類型數(shù)據(jù); 計算機對內(nèi)存的每個內(nèi)存單元都進行了編號,這個編號就稱為內(nèi)存地址,地址決定了內(nèi)存單元在內(nèi)存中的位置; 記住這些內(nèi)存單元地址不方便,因此C++語言的編譯器讓我們通過名字

    2024年02月06日
    瀏覽(20)
  • 【C++】引用與指針

    【C++】引用與指針

    專欄放在【 C++知識總結 】,會持續(xù)更新,期待支持 ?? 引用的概念 在C++中,引用的本質其實就是給一個已經(jīng)存在的變量 ”起別名“ 。也就是說, 引用與它所引用的對象共用一塊空間 。( 同一塊空間的多個名字 ) 就比如說,李逵又叫黑旋風,而黑旋風就是指李逵本人,只

    2024年02月02日
    瀏覽(22)
  • c++的引用和指針

    c++的引用和指針

    我們要清楚的知道,使用指針和引用都可以的傳入函數(shù)的main函數(shù)的變量在局部函數(shù)改變值時,main函數(shù)里面相應的變量也會改變值。但他倆的方式不同。 我們先來說指針,指針傳入局部參數(shù)時,他會在創(chuàng)建個局部指針變量,然后把傳入的地址賦值給局部的指針變量,然后修改

    2024年02月09日
    瀏覽(26)
  • C++[第五章]--指針和引用

    引用就是別名,引用定義時必須初始化: int a; int b=a; //b即為a的別名 如果不是形參,必須初始化,引用某一變量 指針和c一樣; this指針 在類的成員函數(shù)中使用,表示當前對象; C++11 新增了一種引用 類型 引用名 = 右值表達式; 引入右值引用如: 編譯器允許我們?yōu)?num 左值建立

    2024年02月15日
    瀏覽(24)
  • C++拾遺(四)引用與指針

    引用和指針是兩種不同的概念,盡管它們在某些方面有一些相似之處,但它們在功能和用途上是有所區(qū)別 引用:引用是別名,是對已存在變量的另一個稱呼,一旦一個變量被引用,就不能再被引用其他變 量。 int a = 10; int ref = a; ? 這里, ref ?是? a ?的引用,它們引用的是同

    2024年01月25日
    瀏覽(21)
  • C++中const,指針和引用

    在線C/C++編譯器,可以試著運行代碼。 在C語言中,const修飾的量稱為 常變量 (在編譯過程中,const就是當成變量的編譯生成指令的),不可以直接修改它的值,但是可以 通過地址進行修改其對應的值 。并且const修飾的變量可以不進行初始化,編譯器最后默認賦值為0。 然而在

    2024年02月13日
    瀏覽(25)
  • C++中的引用及指針變量

    目錄 1.1 C++中的引用 1.2 C++中的指針變量(pointer) 1.1 C++中的引用 C++中的引用(reference)是一種特殊的變量,它是某個已存在變量的另一個名字。引用變量與指針變量類似,但引用變量必須在聲明時進行初始化,并且一旦引用變量與某個變量關聯(lián)起來,就無法再與其他變量關

    2024年01月20日
    瀏覽(26)
  • 【C++那些事兒】函數(shù)重載與C++中的“指針“——引用

    【C++那些事兒】函數(shù)重載與C++中的“指針“——引用

    君兮_的個人主頁 即使走的再遠,也勿忘啟程時的初心 C/C++ 游戲開發(fā) Hello,米娜桑們,這里是君兮_,我之前看過一套書叫做《明朝那些事兒》,把本來枯燥的歷史講的生動有趣。而C++作為一門接近底層的語言,無疑是抽象且難度頗深的。我希望能努力把抽象繁多的知識講的生

    2024年02月08日
    瀏覽(28)
  • C++智能指針學習——小談引用計數(shù)

    C++智能指針學習——小談引用計數(shù)

    目錄 前言 控制塊簡介 共享控制塊 引用計數(shù)與弱引用計數(shù)創(chuàng)建過程 __shared_ptr __shared_count _Sp_counted_base 弱引用計數(shù)增加過程 再談共享控制塊 __weak_count 引用計數(shù)增加過程 弱引用計數(shù)的減少過程 弱引用計數(shù)減為0 引用計數(shù)的減少過程 引用計數(shù)減為0 參考文章 本文結合源碼討論

    2024年04月08日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包