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

C 指針聲明與運算全解析:從基礎到複雜聲明讀法

     編輯:關於C語言

指針聲明的核心規則

指針聲明遵循「從變量名開始,按優先級向外擴展」的原則:

  1. 括號 () 最高,表示函數。
  2. 方括號 [] 次之,表示數組。
  3. 星號 * 最低,表示指針。
  4. 同級從左到右結合。

經典複雜聲明逐層拆解

1. int (*func)(int *p, int (*f)(int *));

  • func 是指針 *func
  • 指向函數 (),參數:int *p 和 int (*f)(int *)
  • 返回 int
  • 含義:func 是函數指針,指向接受「int 指針」和「函數指針(參數 int*,返回 int)」的函數,該函數返回 int。

2. int (*func[5])(int *p);

  • func 先結合 [5] → 數組
  • 元素類型:*func[0] 是指針
  • 指向函數 (),參數 int *p,返回 int
  • 含義:func 是含 5 個元素的數組,每個元素是函數指針,指向「參數 int*,返回 int」的函數。

3. int (*(*func)[5])(int *p);

  • func 先結合 * → 指針
  • 指向數組 [5]
  • 數組元素是指針 *
  • 指向函數 (),參數 int *p,返回 int
  • 含義:func 是指針,指向「含 5 個函數指針的數組」,每個函數指針指向「參數 int*,返回 int」的函數。

4. int (*(*func)(int *p))[5];

  • func 先結合 * → 指針
  • 指向函數 (),參數 int *p
  • 函數返回指針 *
  • 指向數組 [5],元素為 int
  • 含義:func 是函數指針,指向「參數 int*,返回「指向 5 個 int 的數組的指針」」的函數。

指針運算本質

指針運算實為地址運算,僅允許:

  • 指針 ± 整數:按指向類型大小移動(p + 1 相當於 (char*)p + sizeof(*p))。
  • 指針 - 指針:同類型指針相減,結果為元素個數差(ptrdiff_t)。
  • 指針比較:==、!=、<、> 等,比較地址順序。

禁止:指針 + 指針、指針 × 整數、指針位運算等。

類型在運算中的關鍵作用

int arr[10];
int *p = arr;      // p 指向 int,步長 4 字節
char *q = (char*)arr; // q 指向 char,步長 1 字節

p + 1; // 地址 +4
q + 1; // 地址 +1

同一地址,不同類型指針運算結果截然不同——這正是 C 語言靈活與危險並存的根源。

下一步預告

下一篇將深入講解:指針常量 vs 常量指針、指針數組 vs 數組指針、函數指針 vs 指針函數、野指針成因與防範——敬請期待!

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