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

C 語言指標完全掌握:從概念到進階組合宣告解讀

     編輯:C 語言入門

指標本質

  • 記憶體位元組編址 → 地址即指標
  • 指標變數:專門儲存地址的變數
  • 型態決定解讀方式:int* 指向整數,char* 指向字元

宣告與初始化

int a = 10;
int *p = &a;      // 定義並初始化
int *q; q = &a;   // 分開寫
// 錯誤:int *p; p = 1000; // 不能指定任意數值

核心運算子

指標運算規則

  1. 賦值:同型別指標互賦、陣列名/字串常值/函數名賦予對應指標
  2. 加減:p + n 移動 n * sizeof(*p) 位元組。僅陣列/字串指標有意義
  3. 關係:同陣列指標可比大小、等同、與 0 比較(空指標)

陣列指標 vs 指標陣列


int (*p)[4];   // 陣列指標:指向含 4 個 int 的陣列(二維陣列行)
int *p[4];     // 指標陣列:含 4 個 int* 的陣列

括號改變優先順序,含義天差地別。

字串指標 vs 字元陣列

運算子名稱功能
&取址取得變數地址
*解參考取得指標指向的值
char *pschar str[]
本質指標變數,儲存首址陣列,儲存全字串
初始化char *ps = "text"; 可在區塊內需 static 或逐字元賦值
修改內容不可修改字面常數區可修改
大小sizeof(ps)=指標大小sizeof(str)=陣列長度

函數指標

int (*pf)(int, int); // 指向回傳 int、參數兩 int 的函數
int max(int a, int b) { return a>b?a:b; }
pf = max;
int r = pf(3, 5); // 透過指標呼叫,r=5
  • 不可算術運算
  • 呼叫寫法:(*pf)(args) 或 pf(args)

指標函數(回傳指標的函數)

int *create_array(int n) {
    return malloc(n * sizeof(int));
}

指標陣列作參數 / main 參數

int main(int argc, char *argv[]) { ... }
// argv 為指標陣列,argv[0] 程式名,argv[1]... 參數

多級指標

int a = 10;
int *p = &a;
int **pp = &p; // 二級指標
**pp = 20;     // 修改 a

組合宣告讀法:「由內而外,右優先」

int *(*a[10])(); // a 是陣列[10] → 元素是指標 → 指向函數 → 回傳 int*
// 讀法:a → [10] → * → () → * → int

標準讀法 7 步驟:int *(*(*a)())[10] → a 是函數指標 → 回傳指向 10 元素指標陣列的指標 → 元素指向 int。

小結:指標優勢

  1. 提升執行效率
  2. 實現函數間雙向資料傳遞
  3. 動態記憶體管理
  4. 表達複雜資料結構(鏈表、樹、圖)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved