本文包含兩部分:手寫 string_compare 函數實現 strcmp 邏輯,以及「指針數組」與「數組指針」的聲明語法、內存佈局、優先級規則深度對比。
string_compare*(str1) - *(str2)(ASCII 碼差值)。\0 同時結束返回 0。#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; }
| 聲明 | 名稱 | 含義 | 優先級解析 |
|---|---|---|---|
int *a[10]; | 指針數組 | 10 個 int* 元素的數組 | [] > * → a 先與 [] 結合 |
int (*a)[10]; | 數組指針 | 指向「10 個 int 的數組」的指針 | () > * → a 先與 * 結合,再與 [] |