需定義一個指針變量,使其自增操作 (p++) 能夠跳轉到下一個字符串地址。這要求指針指向的對象是「字符串指針」即 char *,因此指針本身類型為 char ** (指向指針的指針)。
#include <stdio.h>
int main() {
// 1. 定義字符串指針數組 (每個元素是 char*,指向字符串常量)
char *arr[3] = {"abcde", "1234", "42"};
// 2. 定義指向指針的指針,指向數組首元素地址
char **p = &arr[0]; // 等價於 char **p = arr; (數組名退化為首元素地址)
// 3. 遍歷:p++ 會按 sizeof(char*) 步長移動,指向下一個字符串指針
for (int i = 0; i < 3; i++, p++) {
printf("第 %d 個字符串: %s\n", i + 1, *p); // *p 解引用得到 char*,即字符串首地址
}
// 輸出:
// 第 1 個字符串: abcde
// 第 2 個字符串: 1234
// 第 3 個字符串: 42
return 0;
}
arr (字符串指針數組) p (char **) 遍歷過程 +--------+--------+--------+ 初始: p -> arr[0] | arr[0] | arr[1] | arr[2] | p++ : p -> arr[1] +--------+--------+--------+ p++ : p -> arr[2] | | | v v v "abcde" "1234" "42"
int n = 3;
char **dynamicArr = malloc(n * sizeof(char *));
dynamicArr[0] = strdup("Hello");
dynamicArr[1] = strdup("World");
dynamicArr[2] = strdup("!");
char **p = dynamicArr;
for (int i = 0; i < n; i++, p++) {
puts(*p);
}
// 釋放內存
for (int i = 0; i < n; i++) free(dynamicArr[i]);
free(dynamicArr);
定義 char **p 指向字符串指針數組首元素,即可通過 p++ 實現逐字符串遍歷。這是 C 語言處理字符串列表、命令行參數 (argv) 的核心技巧。