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

C語言字符串比較函數實現與指針數組vs數組指針區別詳解

     編輯:關於C語言

C語言字符串比較函數實現與指針數組 vs 數組指針區別詳解

本文包含兩部分:手寫 string_compare 函數實現 strcmp 邏輯,以及「指針數組」與「數組指針」的聲明語法、內存佈局、優先級規則深度對比。

一、字符串比較函數 string_compare

1. 設計思路

  • 逐字符比較兩字符串,首對不同字符決定大小。
  • 相等返回 0;不同返回 *(str1) - *(str2)(ASCII 碼差值)。
  • 遇到 \0 同時結束返回 0。

2. 完整代碼

#include 
#include 

int string_compare(const char *str1, const char *str2) {
    assert(str1); assert(str2); // Debug 模式斷言非空
    while (*str1 == *str2) {
        if (*str1 == '\0') return 0; // 同時到達結尾,相等
        str1++; str2++;
    }
    return *str1 - *str2; // 返回差值
}

int main() {
    char *ch[2];        // 指針數組:兩個 char* 元素
    ch[0] = "ab";       // 指向字符串常量區
    ch[1] = "a";
    printf("%d\n", string_compare(ch[0], ch[1])); // 輸出 'b' - '\0' = 98
    return 0;
}

二、指針數組 vs 數組指針

三、優先級口訣

優先級從高到低:()  >  []  >  *
  • 讀聲明時,從變量名出發,按優先級結合:
  • int *a[10]:a → [10](數組) → *(指針) → int(類型)
  • int (*a)[10]:a → *(指針) → [10](數組) → int

四、assert 宏補充

  • 僅在 Debug 模式(未定義 NDEBUG)生效。
  • 表達式為 0 時中斷程式,彈出對話框(Abort/Retry/Ignore)。
  • 用於內部函數參數合法性檢查,Release 版本自動移除,零開銷。

五、總結

  1. string_compare 通過指針遞增逐字符比較,返回首差值,邏輯清晰高效。
  2. 指針數組存儲多個指針,數組指針指向整個數組,聲明語法靠 () 改變結合順序。
  3. 掌握優先級規則,能秒懂複雜聲明如 int *(*a[5])(int, char*)(函數指針數組)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
聲明名稱含義優先級解析
int *a[10];指針數組10 個 int* 元素的數組[] > * → a 先與 [] 結合
int (*a)[10];數組指針指向「10 個 int 的數組」的指針() > * → a 先與 * 結合,再與 []