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

C 語言指標概念全方位圖解:四大核心維度徹底搞懂

     編輯:C++ 入門

前言:指標是 C 語言的靈魂,也是最大攔路虎

指標是一種特殊變數,**儲存值被解釋為記憶體位址**。要徹底搞懂一個指標,必須釐清四個維度:

  1. 指標的類型(指標本身的類型)
  2. 指標指向的類型(解參考後的類型)
  3. 指標的值(指向的記憶體位址/區域)
  4. 指標本身佔用的記憶體

範例宣告


int    *ptr1;      // 1
char   *ptr2;      // 2
int   **ptr3;      // 3
int   (*ptr4)[3];  // 4
int  (**ptr5)[4];  // 5

(若 4、5 難懂,請參考《如何理解 C/C++ 複雜類型宣告》)

維度一:指標的類型(語法提取法)

**去掉變數名,剩下的就是指標類型**

宣告指標類型
int *ptr1;int*
char *ptr2;char*
int **ptr3;int**
int (*ptr4)[3];int (*)[3]
int (**ptr5)[4];int (**)[4]

維度二:指標指向的類型(解參考類型)

**去掉變數名與最左邊的 *,剩下的就是指向類型**

宣告指向類型說明
int *ptr1;int解參考得 int
char *ptr2;char解參考得 char
int **ptr3;int*解參考得指標
int (*ptr4)[3];int[3]解參考得長度 3 的 int 陣列
int (**ptr5)[4];int (*)[4]解參考得指向長度 4 陣列的指標

關鍵作用:指標算術運算(ptr+1)的步長由**指向類型大小**決定。

維度三:指標的值(位址)與指向的記憶體區域

  • 值:指標儲存的數值,編譯器視為位址。32 位程式中所有指標值均為 32 位整數。
  • 指向區域:從該位址起始,長度為 sizeof(指向類型) 的記憶體區塊。
  • 未初始化指標的值不確定,指向區域不存在/無意義。

習慣:見到指標必問三句——類型?指向類型?指向哪裡?

維度四:指標本身佔用的記憶體

  • sizeof(指標類型) 即可得知。
  • 32 位平台:**4 bytes**;64 位平台:**8 bytes**。
  • 用途:判斷指標運算式是否為左值(可被賦值)。

為何區分「指標類型」與「指向類型」至關重要?

許多劣質教材將兩者混淆,導致讀者前後矛盾、越看越糊塗。**精通指標的關鍵,在於將「類型」這個混淆概念拆解為兩個正交維度**。

延伸閱讀

  • 學好 C 語言的捷徑
  • 每個程式設計師都該學 C 語言的 5 大理由
  • C/C++ 中 static 的作用詳述
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved