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

C 語言指標核心觀念與實戰:記憶體模型、指標運算、函數傳遞、多級指標、野指標防禦

     編輯:關於C語言

無指標,不自由

指標即記憶體位址,如門牌號。掌握指標 = 掌握記憶體直接操作權。

指標四大優勢

  1. 函數修改呼叫者變數 (模擬多返回值)。
  2. 大資料結構傳遞只傳位址 (4/8 bytes),提速省記憶體。
  3. 支援動態資料結構 (鏈表、樹、圖)。
  4. 硬體/OS 介面開發必備 (記憶體映射、暫存器操作)。

記憶體模型與指標儲存

  • 區域變數 → 堆疊 (自動管理、函數返回失效)。
  • 全域/靜態變數 → 全域區 (程式生命週期)。
  • malloc → 堆積 (手動管理、跨函數共享)。
  • 指標變數本身亦儲存於上述區域之一,內容為位址值。

指標運算核心

int a = 3, b = 4;
int *p1 = &a, *p2 = &b;
int val = *p1;        // 3
*p1 = 100;            // 修改 a 為 100
val = *p2;            // 4
  • & 取址,* 解參考 (間接存取)。
  • 指標型別決定解參考讀寫大小與運算步長 (p+1 跳過 sizeof(*p) 位元組)。

函數傳遞:值 vs 指標

void swap_val(int x, int y) { int t=x; x=y; y=t; } // 無效
void swap_ptr(int *x, int *y) { int t=*x; *x=*y; *y=t; } // 有效

int main() {
    int x=3, y=4;
    swap_ptr(&x, &y); // x=4, y=3
}

多級指標

int a = 5;
int *p = &a;
int **pp = &p;

printf("%d\n", **pp);  // 5
  • **pp 經兩層解參考取值。
  • 函數修改呼叫者指標:void alloc(int **pp, size_t n) { *pp = malloc(n); }

野指標雙重防禦

  1. 定義即初始化:int *p = NULL; 或 = &var;。
  2. free(p); p = NULL; 形成反射動作。
  3. 總結

    指標是 C 語言靈魂。理解「位址即門牌號」、堆疊/堆積/全域三區模型、值/指標傳遞語義、多級指標輸出參數模式、野指標雙重防禦,並能手寫 swap、malloc 封裝、鏈表節點操作,即踏入系統級開發大門。

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