教材經典習題:char *pArray[] = {"How", "are", "you"}; 計算字串個數並逐一列印。核心考點:指標陣列作為函式參數退化為 char **,配合 sizeof 計算元素個數。
#include <stdio.h>
void Print(char *arr[], int len);
int main() {
char *pArray[] = {"How", "are", "you"};
int num = sizeof(pArray) / sizeof(char *); // 3
printf("Total string numbers = %d\n", num);
Print(pArray, num);
return 0;
}
void Print(char *arr[], int len) {
for (int i = 0; i < len; i++) {
printf("%s ", arr[i]);
}
printf("\n");
}
sizeof(pArray) = 3 * 指標大小 (24 bytes on x64);傳入函式後退化為指標,sizeof(arr) 僅為指標大小 (8 bytes),必須額外傳長度。"How" 等字面值儲存在唯讀資料段,pArray 存放其首地址。char *p[] = {"abc", "def"}; // 指標陣列,行長度不固定
char str[][4] = {"abc", "def"}; // 二維陣列,每行固定 4 bytes
// 執行期決定字串數量
char **dynamic = malloc(n * sizeof(char *));
for (int i = 0; i < n; i++) {
dynamic[i] = strdup(input_strings[i]); // 複製字串到堆疊
}
// 使用完畢釋放
for (int i = 0; i < n; i++) free(dynamic[i]);
free(dynamic);
Print 內打印 arr[i] 位址與 strlen(arr[i]),確認指標有效性指標陣列是 C 語言處理不定長字串集合的標準模式,掌握「定義處 sizeof 計長、函式傳長、逐元素解引用」三部曲,即可輕鬆應對教材所有相關習題。