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

C++ 指標完整指南:從基礎操作到進階概念(指標算術、陣列、函數指標、多級指標)

     編輯:C++ 入門

C++ 指標完整指南:從基礎操作到進階概念

指標 是儲存另一個變數記憶體位址的變數。掌握指標是 C++ 程式設計師的必修課,它簡化了許多任務,且動態記憶體配置、多型等核心機制均仰賴指標。

記憶體位址與指標宣告

每個變數佔用記憶體,使用 & 取址運算子獲取位址:

int var1;
cout << &var1;  // 輸出類似 0x7ffd...

指標宣告語法:型別 *指標名;。* 表示「指向...的指標」。

int *ip;      // 指向 int 的指標
double *dp;   // 指向 double 的指標
char *cp;     // 指向 char 的指標

所有指標值本質上都是記憶體位址(十六進制整數),差別在於指向資料的型別,決定了解參考時如何解讀位元組。

核心指標操作三部曲

  1. 宣告指標變數
  2. 指派位址:ip = &var;
  3. 解參考:*ip 存取指標指向的值
int var = 20;
int *ip = &var;
cout << "var 值: " << var << endl;        // 20
cout << "ip 位址: " << ip << endl;       // 0x...
cout << "*ip 值: " << *ip << endl;       // 20

進階指標概念總覽

概念說明
空指標NULL 或 nullptr (C++11),表示不指向任何物件
指標算術++、--、+、- 依元素大小移動位址,適用於陣列遍歷
指標與陣列陣列名轉型為指向首元素指標;arr[i] 等價 *(arr+i)
指標陣列儲存指標的陣列,如 int *ptr[10];
指向指標的指標多級間接,如 int **pp; 用於修改指標本身或動態二維陣列
傳遞指標給函數模擬傳址呼叫,函數內可修改實參
函數回傳指標回傳動態配置記憶體、靜態變數位址;勿回傳區域變數位址

指標算術範例

int arr[5] = {10, 20, 30, 40, 50};
int *p = arr;
cout << *p << endl;   // 10
p++;
cout << *p << endl;   // 20
p += 2;
cout << *p << endl;   // 50

函數指標

指向函數的指標,用於回呼、策略模式等:

int add(int a, int b) { return a + b; }
int (*funcPtr)(int, int) = add;
cout << funcPtr(3, 4);  // 7

現代 C++ 建議

  • 優先使用 智慧型指標 (std::unique_ptr, std::shared_ptr) 管理動態記憶體,避免記憶體洩漏。
  • 使用 nullptr 取代 NULL/0,型別安全。
  • 避免裸指標擁有權傳遞,明確語意:observer_ptr (C++20) 或文件註釋。
  • 範圍為基礎的 for 迴圈、標準演算法可減少手動指標操作。

總結

指標是 C++ 強大且危險的工具。理解位址、解參考、算術、與陣列/函數的關係是基礎;善用現代 C++ 設施(智慧型指標、RAII)讓指標使用更安全、更具表達力。

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