首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 指針與引用深度解析

     編輯:C++ 入門

指針基礎

指針本質是存儲地址的變量。聲明 int *p, q; 中 p 是指針,q 是普通 int。p = &x 使 p 指向 x,*p 解引用獲取值。指針自身大小固定(32位系統 4 字節,64位 8 字節)。

空指針 void*

  • 可指向任意類型對象:void *y = &x;。
  • 無法直接解引用,需顯式轉型:(int*)y 或 *((int*)y) 獲取值。
  • 函數返回 void* 表示通用指針,區別於返回 void(無返回值)。

多重指針

int **z = &p;,z 指向指針 p。*z 即 p(地址),**z 即 x(值)。這是動態二維數組的基礎:int **arr = new int*[rows]; 每行再 new int[cols]。

函數指針

定義類型別名:typedef void (*pf)(int&, int*);。變量 pf f = swap; 可作為參數傳遞或返回。實現回調、策略模式的基礎。

引用 & 與指針區別

特性指針引用
重新綁定可隨時指向新對象初始化後不可更改(嫁雞隨雞)
空值可為 nullptr必須綁定有效對象,無空引用
內存實體獨立變量,佔用指針大小別名,不佔用額外內存(sizeof(ref) 為對象大小)
安全性靈活但易出錯(野指針、懸空指針)編譯器保證有效性,更安全
返回動態內存適用(返回指針)不適用(引用掛在棧上,易內存洩漏)

本質

引用是編譯器層面的語法糖,底層實現通常即指針。但引用限制了操作(不可重綁定、不可為空),消除了指針常見錯誤,應優先使用引用,僅在需動態綁定、可空、或操作裸內存時用指針。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved