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

C語言指針運算全解析:賦值、算術、比較與空指針實戰

     編輯:關於C語言

指針賦值運算六大形式

  1. 初始化賦值:int *pa = &a;
  2. 變量地址賦給同類型指針:pa = &a;
  3. 同類型指針互賦:pb = pa;
  4. 數組首地址賦給指針:pa = a; 或 pa = &a[0];
  5. 字符串首地址賦給字符指針:char *pc = "C Language";(存入的是字符數組首地址,非整個字符串)
  6. 函數入口地址賦給函數指針:int (*pf)(); pf = f;

指針算術運算

僅適用於指向數組的指針:

  • pa + n / pa - n:向前/後移動 n 個元素位置
  • pa++ / ++pa / pa-- / --pa:移動一個元素位置

關鍵點:移動步長 = 元素類型大小(字節數),非單純地址 +1。指向非數組類型的指針加減無意義。

指針間運算

1. 指針相減

同一數組的兩指針相減 → 元素個數差(地址差 ÷ 元素大小)。例:float *pf1=2010H, *pf2=2000H,元素 4 字節 → pf1-pf2 = 4。指針相加無意義。

2. 指針比較

  • 同一數組指針可比較 >、<、==,反映元素位置高低
  • 指針可與 0 比較:p==0 為空指針,p!=0 非空

空指針通過賦 0 獲得:#define NULL 0; int *p = NULL;。未賦值指針含隨機值,使用會導致錯誤;賦 0 後可安全使用(僅不指向具體變量)。

實戰示例:指針求最大/最小值

int main() {
    int a, b, c, *pmax, *pmin;
    scanf("%d%d%d", &a, &b, &c);
    if (a > b) { pmax = &a; pmin = &b; }
    else { pmax = &b; pmin = &a; }
    if (c > *pmax) pmax = &c;
    if (c < *pmin) pmin = &c;
    printf("max=%d\nmin=%d\n", *pmax, *pmin);
    return 0;
}

指針運算綜合演示

int main() {
    int a=10, b=20, s, t, *pa=&a, *pb=&b;
    s = *pa + *pb;  // a+b
    t = *pa * *pb;  // a*b
    printf("a=%d\nb=%d\na+b=%d\na*b=%d\n", a, b, a+b, a*b);
    printf("s=%d\nt=%d\n", s, t);
    return 0;
}

總結

指針運算是C語言高效操作內存的核心。掌握賦值規則、算術移動語義、比較邏輯及空指針處理,能避免常見陷阱,編寫健壯代碼。

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