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

C語言指針深度解析(一):定義、多級指針與大小端判斷

     編輯:關於C語言

指針核心定義

指針是變量,專門用來存儲地址的變量。 通過 & 運算符獲取變量首地址,地址帶有類型信息:

  • char val; &val 類型為 char*
  • int val; &val 類型為 int*
  • int* p; &p 類型為 int**

編譯器會自動檢查類型匹配,不匹配報警;可用強制轉換 (char*)&val 消除警告。

編譯器類型檢查示例

解引用運算符 * 的精確語義

*地址A:從地址 A 起始,向後讀取「地址類型所佔字節數」個字節。

  • int* p = 0x0012FF7C → *p 讀取 4 字節(0x0012FF7C~0x0012FF7F)
  • char* p = 0x0012FF7C → *p 僅讀取 1 字節(0x0012FF7C)

類型決定讀取寬度,這是指針運算的核心邏輯。

多級指針實戰演示

int val = 12;
int *p = &val;
int **pp = &p;
int ***ppp = &pp;
printf("%d %d %d %d\n", val, *p, **pp, ***ppp); // 全部輸出 12

內存佈局關係:

層級變量值(地址)指向
0val0x0012FF7C數據 12
1p0x0012FF78&val (0x0012FF7C)
2pp0x0012FF74&p (0x0012FF78)
3ppp0x0012FF70&pp (0x0012FF74)

***ppp 逐層解引用:ppp → pp → p → val,完美驗證地址鏈。

多級指針內存佈局

應用:檢測大小端模式

int val = 1;
char firstByte = *(char*)&val; // 取 val 首字節
if (firstByte == 1) printf("小端模式\n");
else if (firstByte == 0) printf("大端模式\n");

利用 int 佔 4 字節,小端模式最低地址存最低有效位(1),大端模式存最高有效位(0)。

總結與預告

指針理論已夠扎實,但「指針有什麼用?」答案在函數參數傳遞、動態內存、數據結構中。下一講深入棧幀與函數調用機制,揭開指針實戰威力的序幕。

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