1、静态字符串数组
静态字符串数组通常指在编译时已确定大小和内容的字符串数组,数组中的每个元素是一个指向字符串字面量(字符串常量)的指针。
#include <stdio.h> int main() { const char *colors[] = {"Red", "Green", "Blue", "Yellow"}; int n = sizeof(colors) / sizeof(colors[0]); for (int i = 0; i < n; i++) { printf("%s\n", colors[i]); } return 0; }
2、 可修改的二维字符数组(固定长度)
如需要修改字符串内容,可以用二维数组。
#include <stdio.h> int main() { char fruits[3][10] = {"Apple", "Banana", "Cherry"}; fruits[1][0] = 'b'; // 修改"Banana"为"banana" for (int i = 0; i < 3; i++) { printf("%s\n", fruits[i]); } return 0; }
3、动态字符串数组(堆分配)
动态字符串数组是字符串数量不固定(动态分配),每个字符串也是动态分配(堆上存储)可读可写,可动态增加或释放。
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int n = 3; char *animals[] = {"Cat", "Dog", "Elephant"}; char **dynamic_array = malloc(n * sizeof(char *)); for (int i = 0; i < n; i++) { dynamic_array[i] = strdup(animals[i]); // 复制字符串到堆上 } for (int i = 0; i < n; i++) { printf("%s\n", dynamic_array[i]); free(dynamic_array[i]); // 释放每个字符串 } free(dynamic_array); // 释放指针数组 return 0; }
4、字符指针数组(推荐)
适合存储多个字符串,且可以用字符串常量初始化。
#include <stdio.h> int main() { const char *str[] = { "Hello", "World", "C Language" }; for (int i = 0; i < 3; i++) { printf("%s\n", str[i]); } return 0; }