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

C 語言入門筆記(五):指標完整指南——定義、運算、陣列/字串/函數指標實戰

     編輯:關於C語言

指標基礎

  • 直接引用:變數名 → 系統自動轉址存取;
  • 間接引用:將變數位址存入另一變數(指標變數),透過指標存取原變數;
  • 宣告:型別 *指標名;,* 為宣告符,**非** 解參考運算子。

核心運算子

指標與一維陣列

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)); }

常見錯誤避坑

  1. 未初始化指標直接解參考 → **野指標**,嚴重者導致系統崩潰;
  2. char *p = "abc"; *p = 'x'; → 修改常數區,執行期錯誤;
  3. 函數回傳區域變數位址 → 離開作用域記憶體失效;
  4. 指標型別不匹配強制轉換 → 違反嚴格別名規則,行為未定義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
運算子用途範例
&取址int *p = &a;
*解參考(存取指向物件)*p = 10; int v = *p;