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

C 語言最強大之處——指針:從地址、解引用、數組關係到函數指針全景解析

     編輯:關於C語言

C 語言最強大之處——指針:從地址、解引用、數組關係到函數指針全景解析

指針是 C 語言的靈魂,直接操作記憶體地址,賦予程式員極致控制力。本文系統梳理指針定義、初始化、解引用、與數組/字符串/函數的關係,構建完整指針知識圖譜。

一、 指針本質:地址的變量

  • 指針變量存儲記憶體地址,類型決定解引用訪問大小(int* 訪問 4 字節,char* 訪問 1 字節)。
  • 定義:int *p; char *c;,* 屬於聲明符一部分。
  • 初始化:int a=10; int *p = &a; 取地址賦值。

二、 解引用(間接訪問)

int a = 12;
int *p = &a;
int b = *p; // b = 12,通過 p 訪問 a 所在記憶體
*p = 20;    // 修改 a 為 20

*p 相當於「以 p 為地址訪問記憶體」,是左值(可賦值)。

三、 指針與數組:等價與差異

  • 數組名 arr 是指針常量,值為 &arr[0](首元素地址),不可修改(arr++ 非法)。
  • arr[i] 等價 *(arr + i),下標操作本質是指針算術 + 解引用。
  • 指針算術:p + 1 移動 sizeof(*p) 字節,類型決定步長。

四、 指針與字符串

  • char arr[] = "abc"; 字符數組(棧上,可修改)。
  • char *p = "abc"; 字符指針指向常量區字面值(不可修改,*p = 'x' 崩潰)。
  • 字符串數組:char *arr[2] = {"hi", "hello"}; 指針數組,每項指向常量區。

五、 指針與函數

概念定義例子
指針型函數返回指針的函數int* foo()
函數指針指向函數代碼區的指針int (*fp)(int) = foo;
回調函數作為參數傳遞的函數指針void sort(int*, int, int(*)(int,int))

函數指針可實現多態、策略模式、事件回調,是 C 語言面向對象編程的基石。

六、 進階:const 修飾位置

  • const int *p / int const *p:指向常量的指針(*p 不可改,p 可改)。
  • int *const p:常量指針(p 不可改,*p 可改)。
  • const int *const p:雙重常量。

七、 總結

指針 = 地址 + 類型。掌握類型決定步長與訪問寬度、數組名退化為指針、字符串字面值存常量區、函數指針實現回調,即掌握 C 語言核心威力。

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