指針操作是 C 語言最強大也最危險的特性。本文通過一個經典段錯誤案例,揭示「指針變量本身 vs 指向的內存」區別,強調指針使用前必須指向合法內存。
int *i;
*i = 12; // 段錯誤!
int *i 定義一個指針變量,存儲地址值*i = 12 嘗試向該隨機地址寫入 → 非法內存訪問 → 段錯誤關鍵認知:*i = 12 語法正確,但前提是 i 指向可寫的合法內存。
// 指向現有變量
int j;
int *i = &j;
*i = 12; // 合法,修改 j
// 或動態分配
int *i = malloc(sizeof(int));
if (i) {
*i = 12;
free(i);
}
int n = 10;
int *arr = malloc(n * sizeof(int));
if (arr) {
for (int k = 0; k < n; k++) arr[k] = k;
free(arr);
}
NULL、&var、malloc)指針是地址的變量,「有指針不等於有內存」。所有指針操作的前提:指向合法、可訪問、生命週期內的內存區域。這是 C/C++ 內存安全的基石。