章節核心觀點
第 2 章奠定了理解指針的基礎:計算機內存模型、變量存儲、地址運算符 & 與間接訪問運算符 * 的本質關系。
1. 內存與地址
- 內存是位組(byte)序列,每個位組有唯一地址編號(0 到 2^N-1)
- 變量是內存區域的標籤,編譯器將變量名映射到起始地址
sizeof(type) 決定類型佔用的位組數
2. 關鍵運算符
| 運算符 | 名稱 | 作用 | 示例 |
& | 取地址運算符 | 獲取變量/對象的起始地址 | int *p = &a; |
* | 間接訪問/解引用 | 訪問地址指向的對象 | *p = 10; |
3. 指針變量
- 指針本質:存儲地址的變量,自身有類型(如
int *)、值(地址)、指向類型(int)、佔用內存(32位機 4 字節)
- 聲明語法:
type *name; → name 是指向 type 的指針
- 指針類型決定了解引用時訪問的位組數及指針算術運算步長
4. 空指針
NULL(通常定義為 (void*)0)表示不指向任何有效對象
- 使用前必須檢查:
if (p != NULL) *p = ...
5. 指針與數組的初步聯系
- 數組名在大多數表達式中轉換為指向首元素的指針(
a == &a[0])
a[i] 等價於 *(a + i)
- 但數組名不是指針變量:不可修改(
a++ 非法)、sizeof(a) 返回整個數組大小
學習建議
- 畫內存圖:變量、指針、指向關系可視化
- 區分「指針類型」與「指向類型」:
int **p 類型是 int**,指向類型是 int*
- 養成初始化習慣:
int *p = NULL; 或 int *p = &a;
- 理解
*p++、(*p)++、*(p++) 的結合順序差異
本章雖基礎,但對後續理解指針算術、數組指針、函數指針、動態內存至關重要。建議配合調試器觀察內存地址變化加深印象。
- 上一篇文章: PAT 基礎級 結構體練習:通訊錄錄入與查詢(結構-04)
- 下一篇文章: 《C和指針》讀書筆記第3章:數據表示與類型系統
Copyright ©
程式碼之家 All Rights Reserved