| 運算子 | 用途 | 範例 |
& | 取址 | int *p = &a; |
* | 解參考(存取指向物件) | *p = 10; int v = *p; |
指標與一維陣列
int a[5] = {1,2,3,4,5};
int *p = a; // p 指向首元素
for (int i=0; i<5; i++) printf("%d ", *(p+i)); // 等價 p[i]
for (; *p; p++) printf("%d ", *p); // 字串專用(以 \0 結束)
指標作為函數參數(模擬傳址呼叫)
void swap(int *x, int *y) {
int t = *x; *x = *y; *y = t;
}
int main() { int a=3,b=5; swap(&a,&b); }
指標與字串
char *s = "hello"; → s 指向**常數區**字面值,**不可修改**內容;
char s[] = "hello"; → s 為**陣列變數**在堆疊/資料區,**可修改**;
- 標準庫函數原型:
strlen(const char*), strcpy(char*,const char*), strcmp(const char*,const char*)。
函數指標
int add(int a,int b){ return a+b; }
int (*fp)(int,int) = add; // 宣告
fp(3,4); // 呼叫
// 作為參數傳遞
void apply(int (*f)(int,int), int x, int y) { printf("%d", f(x,y)); }
常見錯誤避坑
- 未初始化指標直接解參考 → **野指標**,嚴重者導致系統崩潰;
char *p = "abc"; *p = 'x'; → 修改常數區,執行期錯誤;
- 函數回傳區域變數位址 → 離開作用域記憶體失效;
- 指標型別不匹配強制轉換 → 違反嚴格別名規則,行為未定義。
- 上一篇文章: C 語言入門筆記(二):流程控制語句與運算子完整速查表
- 下一篇文章: C 語言入門筆記(四):字串、字串陣列與標準庫字串函數完全手冊
Copyright ©
程式碼之家 All Rights Reserved