0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

指針和引用的區(qū)別及使用場景介紹

Q4MP_gh_c472c21 ? 來源:程序喵大人 ? 作者:程序喵大人 ? 2022-03-11 10:24 ? 次閱讀

先拋出兩個問題:

指針和引用有什么區(qū)別?

什么時候使用指針?什么時候使用引用?

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

首先,看一段代碼:

int a = 1;int b = 2;int *c = nullptr;c = &a;int &d = b;

指針其實就是一個存放內存地址的整數(shù),這個整數(shù)表示的是被指向的變量的地址。

引用其實就是變量的別名,就是給變量重新起了一個名字,注意引用既然是個別名,那它一定要有本體,一個人叫王二小,我們也可以給它起個別名叫二蛋,我們提到二蛋和王二小其實都是同一個人。

區(qū)別:

指針在聲明時可以暫時不初始化,即pointer = nullptr,指針在生命周期內隨時都可能是空指針,所以在每次使用時都要做檢查,防止出現(xiàn)空指針異常問題,而引用卻不需要做檢查,因為引用永遠都不會為空,它一定有本體,一定得代表某個對象,引用在創(chuàng)建的同時必須被初始化。

void FuncPtr(int *ptr) { if (ptr != nullptr) { cout << *ptr; }} void FuncReference(int &ref) { cout << ref;}

指針存放的是地址,指針可以被重新賦值,可以在初始化時指向一個對象,在其它時刻也可以指向另一個對象,而引用非常專一,它會從一而終,它總是指向它最初代表的那個對象。再舉個例子,有一個人叫特朗普,為他起個引用別名叫歷史上最傻吊的總統(tǒng),這個引用一定會從一而終,即無論什么時候,歷史上最傻吊的總統(tǒng)一定是特朗普。而美國總統(tǒng)可以當作個指針,一段時間可以是奧巴馬,過一段時間可以是特朗普,再過一段時間可能是nullptr。

二、指針和引用的使用場景

引用的主要功能就是作為函數(shù)的參數(shù)和返回值,看一段代碼:

struct A { int a;};void func(const A &a) { cout << a.a;} vector vec(10);vec[3] = 3;為什么通過vec[3] =3可以改變vector容器的值,因為[]操作符返回的就是引用,相當于為內部的變量起了一個別名,這里還可以讓[]操作符返回一個指針,即*vec[3]=3,這是不是有點丑,而且不符合語法需求。

其實我們平時編程過程中可能也注意到,實際上引用可以做的事情指針都可以做,但為什么還要引用這個東西?

答案:

用恰當?shù)墓ぞ咦銮∪缙浞值墓ぷ鳎羔樋梢院翢o約束的操作內存中的任何東西,功能十分強大,但是也很危險,所以可以在恰當?shù)臅r機使用引用,當你需要指向某個東西,而且一定專一,絕不會讓其指向其它東西,例如有些函數(shù)參數(shù)為了避免拷貝可以使用引用,或者實現(xiàn)一個操作符而其語法需求無法由指針達成,例如vec[3]=3,可以使用引用,其它任何時候,都要使用指針。

引用在c++11后其實有很多知識點,具體可以參考下列文章:

左值引用、右值引用、移動語義、完美轉發(fā),你知道的不知道的都在這里

參考資料

《More Effective C++》

https://www.runoob.com/w3cnote/cpp-difference-between-pointers-and-references.html

https://blog.csdn.net/weikangc/article/details/49762929

https://www.jianshu.com/p/e548a978d737

https://zhuanlan.zhihu.com/p/63096392

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 指針
    +關注

    關注

    1

    文章

    478

    瀏覽量

    70491
  • 引用
    +關注

    關注

    0

    文章

    8

    瀏覽量

    7720

原文標題:指針和引用有什么區(qū)別?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    實時示波器的技術原理和應用場景

    實時示波器是一種高性能的電子測量儀器,其技術原理和應用場景對于電子工程和通信技術領域具有重要意義。以下是對實時示波器的技術原理和應用場景的詳細解釋:一、技術原理實時示波器的工作原理基于電子束在熒光屏
    發(fā)表于 10-23 14:22

    源測量單元設備的技術原理和應用場景

    源測量單元(SMU)設備是一種集成了精密電源(PPS)和高性能數(shù)字萬用表(DMM)功能的測試設備。以下是對其技術原理和應用場景的詳細解析:一、技術原理 集成功能: SMU在單個儀器中集成了電源
    發(fā)表于 10-22 11:10

    超聲波測厚儀的技術原理和應用場景

    超聲波測厚儀的技術原理和應用場景詳細如下:技術原理超聲波測厚儀利用超聲波脈沖反射原理來測量材料的厚度。具體工作原理如下: 發(fā)射超聲波脈沖:測厚儀的探頭(也稱為換能器)向被測物體發(fā)射一束高頻超聲波脈沖
    發(fā)表于 09-27 15:06

    NFC協(xié)議分析儀的技術原理和應用場景

    NFC協(xié)議分析儀的技術原理和應用場景可以詳細闡述如下:技術原理NFC(Near Field Communication,近場通信)協(xié)議分析儀是一種用于分析NFC通信協(xié)議和性能的專業(yè)設備。其技術
    發(fā)表于 09-25 14:45

    面試???1:函數(shù)指針指針函數(shù)、數(shù)組指針指針數(shù)組

    在嵌入式開發(fā)領域,函數(shù)指針指針函數(shù)、數(shù)組指針指針數(shù)組是一些非常重要但又容易混淆的概念。理解它們的特性和應用場景,對于提升嵌入式程序的效率
    的頭像 發(fā)表于 08-10 08:11 ?606次閱讀
    面試???1:函數(shù)<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>函數(shù)、數(shù)組<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>數(shù)組

    請問risc-v芯片的主要應用場景是哪里?

    如題,我想請教一下risc-v芯片與其他的芯片在應用場景上有哪些不一樣?
    發(fā)表于 07-30 21:23

    FPGA與MCU的應用場景

    FPGA的應用場景有這些: 快速原型設計 FPGA可以快速配置成多種定制數(shù)字電路,允許在不需要昂貴且耗時的制造過程的情況下進行快速部署和修改。 硬件加速 在需要高性能和低延遲的應用中,F(xiàn)PGA的并行
    發(fā)表于 07-29 15:45

    STM32待機模式適合用于那些應用場景?

    對于查看STM32低功耗模式,共有三種,其中最省電的為待機模式,但是待機模式喚醒后相當于軟件復位了,ram及寄存器中的值都復位了,僅僅是備份域的寄存器除外,因此有個疑問,待機模式適合用于那些應用場景
    發(fā)表于 05-07 07:46

    C語言函數(shù)指針六大應用場景詳解

    函數(shù)指針是一種非常強大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 6 個函數(shù)指針的高級應用場景,并貼出相應的代碼案例和解釋。
    的頭像 發(fā)表于 04-23 18:19 ?822次閱讀

    NanoEdge AI的技術原理、應用場景及優(yōu)勢

    能耗并提高數(shù)據(jù)安全性。本文將對 NanoEdge AI 的技術原理、應用場景以及優(yōu)勢進行綜述。 1、技術原理 NanoEdge AI 的核心技術包括邊緣計算、神經網絡壓縮和低功耗硬件設計。邊緣計算
    發(fā)表于 03-12 08:09

    應變片1/4橋、半橋、全橋的區(qū)別及其應用場景

    分為1/4橋、半橋和全橋。本文將詳細介紹這三種橋的區(qū)別及其各自適用的應用場景。 1/4橋是將單個應變片的電阻串聯(lián)在電橋的一個支路上,另一個支路上則為固定電阻。當應變片發(fā)生變形時,它的電阻值發(fā)生變化,導致電橋不平衡,進而產
    的頭像 發(fā)表于 02-04 14:48 ?1.3w次閱讀

    AG32VF-MIPI應用場景

    MIPI接口技術在圖像和視頻傳輸中的應用越來越廣泛,應用場景也在不斷拓展,而不僅限于移動設備。MIPI接口在物聯(lián)網、智能家居、智能監(jiān)控、智能電視、智能汽車等領域也得到廣泛應用。 MIPI還可
    發(fā)表于 01-22 08:56

    函數(shù)指針的基本概念和語法

    函數(shù)指針是一種非常強大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 8 個函數(shù)指針的高級應用場景,并貼出相應的代碼案例和解釋。
    的頭像 發(fā)表于 12-12 09:33 ?422次閱讀

    vlookup絕對引用和相對引用區(qū)別

    絕對引用和相對引用是在Excel中使用VLOOKUP函數(shù)時的兩種引用方式,它們的主要區(qū)別在于在填充公式時,引用的單元格地址是否會發(fā)生改變。
    的頭像 發(fā)表于 12-01 10:27 ?3429次閱讀

    上位機和plc有啥區(qū)別 上位機和PLC的應用場景

    上位機和plc有啥區(qū)別 上位機和PLC的應用場景? 上位機和PLC是工業(yè)自動化領域中常見的兩種設備,它們在功能、應用場景以及工作原理等方面存在一定的差異。本文將從這些角度詳細討論上位機和PLC的
    的頭像 發(fā)表于 11-22 16:51 ?6016次閱讀