C++-引用和指針區別

文章目錄

  • 1.變量的組成
  • 2.指針
    • 2.1 定義
    • 2.2 使用指針操作變量
    • 2.3 為什么使用指針
  • 3.引用
    • 3.1 定義
    • 3.2 引用注意事項
  • 4.引用和指針的區別

1.變量的組成

變量的組成:變量地址,變量名,變量值

例:

int i = 12;

在這里插入圖片描述

2.指針

2.1 定義

指針用于存放一個變量在內存中的地址,通過指針間接操作這個變量。指針變量本身也是一個變量,也有變量地址,變量名,變量值。

例:

int i = 12;
int *p; //聲明一個整型指針變量p
p = &i; //將i的地址賦給指針變量p

&為取地址符。

int *p = &i;
等價于
int *p; //聲明一個整型指針變量p
p = &i; //將i的地址賦給指針變量p

在這里插入圖片描述
指針變量p的變量值存放變量i的地址。
*p指向變量i的值

2.2 使用指針操作變量

通過 *p改變變量i的變量值

int i= 12;
int *p = &i; //聲明一個整型指針變量p
*p=13;
cout << i << endl;//輸出i=13

2.3 為什么使用指針

可以通過變量名i直接改變變量值,為什么通過指針呢?
其實通過變量名改變變量值,中間也是通過地址去訪問的。
從運行棧的角度考慮

int    *ip;    /* 一個整型的指針 */
double *dp;    /* 一個 double 型的指針 */
float  *fp;    /* 一個浮點型的指針 */
char   *ch;    /* 一個字符型的指針 */

指針變量ip,dp,fp,ch的內存空間一般都是四字節,所有指針的值的實際數據類型,都是一個代表內存地址的長的十六進制數。

在棧上運行指針,比運行實際的變量所占的內存小, 把指針放到棧中能有效節省空間還能節省傳遞大參數時所耗費的時間 ,所以能更快, 而且棧空間很小很寶貴 , 不可能把大數據壓進去的。

3.引用

3.1 定義

  • 引用是某個變量的別名,相當于某個變量的第二個名字。對引用的操作,就相當于對變量的操作
    引用形式
  • 引用是用&引導定義:類型 &引用名=變量名;
int i = 12;
int &j = i;
cout<<"i="<<i<<"  "<<"j="<<j<<endl;
//輸出i=12  j=12j = 13;
cout<<"i="<<i<<"  "<<"j="<<j<<endl;
//輸出i=13  j=13cout<<"i的地址是:"<<&i<<endl;
//i的地址是:0x0001cout<<"j的地址是:"<<&j<<endl;
//j的地址是:0x0001

在這里插入圖片描述

3.2 引用注意事項

  1. 不能建立引用的引用
  2. 不能建立引用數組,不能建立數組引用
  3. 可以建立指針的引用,不能建立指向引用的指針
int i=0,a[10];
int &&ii=i;  //錯誤,ii是引用的引用
int &&aa=a;  //錯誤,aa是數組的引用
int &*ip=i;  //錯誤,ip是指向引用的指針int *pi=&i;
int *&pr=pi; //正確,pr是指針的引用

4.引用和指針的區別

相同點:

  • 都是地址的概念;
  • 指針指向一塊內存,它的內容是所指內存的地址;
  • 引用是某塊內存的別名。

區別:

  • 指針是一個變量,只不過這個變量存儲的是一個地址,指向內存的一個存儲單元,即指針是一個實體;而引用跟原來的變量實質上是同一個東西,只不過是原變量的一個別名而已。
  • 指針的值可以為空,但是引用的值不能為NULL,并且引用在定義的時候必須初始化;
  • 指針的值在初始化后可以改變,即指向其它的存儲單元,而引用在進行初始化后就不會再改變了,從一而終。
  • ”sizeof引用”得到的是所指向的變量(對象)的大小,而”sizeof指針”得到的是指針本身的大小;
  • 指針和引用的自增(++)運算意義不一樣;
  • 引用沒有 const,指針有 const,const 的指針不可變;
  • 引用使用時無需解引用(*),指針需要解引用;

參考:
[1]http://t.csdnimg.cn/S3Fu1
[2]https://blog.csdn.net/shang_0122/article/details/104755481
[3]https://blog.csdn.net/tonglin12138/article/details/94555024

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211681.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211681.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211681.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何為游戲角色3D模型設置紋理貼圖

在線工具推薦&#xff1a; 3D數字孿生場景編輯器 - GLTF/GLB材質紋理編輯器 - 3D模型在線轉換 - Three.js AI自動紋理開發包 - YOLO 虛幻合成數據生成器 - 三維模型預覽圖生成器 - 3D模型語義搜索引擎 當談到游戲角色的3D模型風格時&#xff0c;有幾種不同的風格&#xf…

Mybatis中的查詢操作

單表查詢 單表查詢在《初始Mybatis》中已經介紹過&#xff0c;這里就不在介紹了。咱們這里只說單表查詢中的“like查詢”。like查詢單獨使用#{}報錯 <select id"selectByKeyword" resultType"com.example.demo.entity.Userinfo">select * from use…

計網Lesson8 - NAT技術與鏈路層概述

文章目錄 NAT 技術1. 因特網的接入方式2. 公網和私網3. NAT 技術 鏈路層1. 數據鏈路層概述2. 數據鏈路層的三個問題2.1 封裝成幀2.2 透明傳輸2.3 差錯檢測 NAT 技術 1. 因特網的接入方式 光貓將電信號轉換為數字信號發送給路由器 光纖入戶 光纖傳遞的就是數字信號&#xff0c…

python+pytest接口自動化(12)-自動化用例編寫思路 (使用pytest編寫一個測試腳本)

經過之前的學習鋪墊&#xff0c;我們嘗試著利用pytest框架編寫一條接口自動化測試用例&#xff0c;來厘清接口自動化用例編寫的思路。 我們在百度搜索天氣查詢&#xff0c;會出現如下圖所示結果&#xff1a; 接下來&#xff0c;我們以該天氣查詢接口為例&#xff0c;編寫接口測…

錯題總結(三)

1.寫代碼將三個整數數按從大到小輸出。 例如&#xff1a; 輸入&#xff1a;2 3 1 輸出&#xff1a;3 2 1 int main() {int a 0;int b 0;int c 0;int tep 0;scanf("%d%d%d", &a, &b, &c);if (a < b){tep a;a b;b tep;}if (b < c){tep b…

每日一練2023.12.9—— 矩陣A乘以B【PTA】

題目鏈接&#xff1a;L1-048 矩陣A乘以B 題目要求&#xff1a; 給定兩個矩陣A和B&#xff0c;要求你計算它們的乘積矩陣AB。需要注意的是&#xff0c;只有規模匹配的矩陣才可以相乘。即若A有Ra?行、Ca?列&#xff0c;B有Rb?行、Cb?列&#xff0c;則只有Ca?與Rb?相等時&a…

Linux Shell 基礎命令

Linux 是一個開源的操作系統&#xff0c;其命令行界面是它的重要組成部分。在這個界面下&#xff0c;Shell 是一個能夠與操作系統進行交互的工具。Shell 是一種程序&#xff0c;它能夠接收用戶輸入的命令&#xff0c;并將這些命令發送到操作系統中進行處理。 在 Linux 中&…

Docker實戰筆記 三 Docker私有庫

1.拉取私有庫image rootcenots-7.5:/root#docker pull registry Using default tag: latest latest: Pulling from library/registry c926b61bad3b: Pull complete 5501dced60f8: Pull complete e875fe5e6b9c: Pull complete 21f4bf2f86f9: Pull complete 98513cca25bb: P…

VINS-MONO代碼解讀5----vins_estimator(marginalization部分)

文章目錄 0. 前言1.1 Marginalization Pipiline 1. marg factor構建1.1 變量及維度理解1.2 IMUFactor1.3 ProjectionTdFactor(ProjectionFactor)1.4 MarginalizationFactor( e p e_p ep?推導更新&#xff0c;FEJ解決的問題)1.4.1 先驗殘差的更新1.4.2 先驗Jacobian的更新 2. R…

windows install git

refer: https://developers.weixin.qq.com/miniprogram/dev/devtools/wechatvcs.html https://blog.csdn.net/weixin_40228200/article/details/128451324 在使用小程序的時候&#xff0c;需要初始化項目&#xff0c;需要注冊Git賬號 1.在本地確認cmd沒有安裝Git,進入Git官網…

docker:安裝mysql以及最佳實踐

文章目錄 1、拉取鏡像2、運行容器3、進入容器方式一方式二方式三容器進入后連接mysql和在宿主機連接mysql的區別 持久化數據持久化數據最佳實踐 1、拉取鏡像 docker pull mysql2、運行容器 docker run -d -p 3307:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD123456 …

Botton進一步了解(點擊事件)

點擊事件和長按事件 監聽器&#xff1a;專門監聽控件的動作行為。只有控件發生了指定的動作&#xff0c;監聽器才會觸發開關區執行對應的代碼邏輯。按鈕控件有兩種常用的監聽器&#xff1a; 點擊監聽器&#xff1a;通過setOnClickListener方法設置。按鈕被按住少于500ms時會觸…

2023濟南大學acm新生賽題解

通過答題情況的難度系數&#xff1a; 簽到&#xff1a;ACI 銅牌題&#xff1a;BG 銀牌題&#xff1a;EF 金牌題&#xff1a;DHJKO 賽中暫未有人通過&#xff1a;LMNP A - AB Problem 直接根據公式計算就行。 #include<stdio.h> int main(){int a,b;scanf("%…

安卓MediaRecorder(2)錄制源碼分析

文章目錄 前言JAVA new MediaRecorder() 源碼分析android_media_MediaRecorder.cpp native_init()MediaRecorder.java postEventFromNativeandroid_media_MediaRecorder.cpp native_setup() MediaRecorder 參數設置MediaRecorder.prepare 分析MediaRecorder.start 分析MediaRec…

當前 .NET SDK 不支持面向 .NET X.0 (如8.0)問題的解決方案

如果您加載方案或運行時出現如下錯誤時&#xff1a; 當前 .NET SDK 不支持面向 .NET 8.0。請面向 .NET 7.0 或更低版本&#xff0c;或者使用支持 .NET 8.0 的 .NET SDK 版本。從 https://aka.ms/dotnet/download 下載 .NET SDK (項目名稱).Domain C:\Program Files\dotnet\…

Windows在cmd中執行bat腳本

在Linux中執行腳本常用的是sh或者直接輸入腳本名稱即可。 sh shell腳本.sh # 或者 shell腳本.sh在Windows中類似&#xff0c;使用start或者直接輸入腳本名稱。 start bat腳本.bat :: 或者 bat腳本.bat

【Angular開發】Angular在2023年之前不是很好

做一個簡單介紹&#xff0c;年近48 &#xff0c;有20多年IT工作經歷&#xff0c;目前在一家500強做企業架構&#xff0e;因為工作需要&#xff0c;另外也因為興趣涉獵比較廣&#xff0c;為了自己學習建立了三個博客&#xff0c;分別是【全球IT瞭望】&#xff0c;【架構師酒館】…

SSL證書更新

首先&#xff0c;我們需要理解為什么需要更新SSL證書。SSL證書的有效期通常為一年。一旦證書過期&#xff0c;瀏覽器會顯示警告&#xff0c;提示用戶該網站的SSL證書已經過期&#xff0c;這可能會導致用戶對網站的信任度下降&#xff0c;甚至直接離開網站。此外&#xff0c;一些…

【Python】手把手教你用tkinter設計圖書管理登錄UI界面(一)

下一篇&#xff1a; 本項目將分段設計“圖書管理登錄UI界面”的用戶登錄、用戶注冊、用戶賬號找回等。主要圍繞GUI標準庫tkinter、以及類的繼承&#xff08;重點&#xff09;來設計本項目。 首先新建一個文件夾命名為“圖書管理系統項目”&#xff0c;并在其目錄下新建文件夾…

【分治】最接近點對Python實現

文章目錄 [toc]問題描述一維最接近點對算法Python實現 二維最接近點對算法分治算法時間復雜性Python實現 問題描述 給定平面上 n n n個點&#xff0c;找其中的一對點&#xff0c;使得在 n n n個點組成的所有點對中&#xff0c;該點對的距離最小 一維最接近點對算法 Python實…