1. 二维字符型数组详解
1.1 基本概念与定义
二维字符型数组是C语言中用于存储多个字符串的数据结构。它本质上是一个数组的数组,每个元素又是一个字符数组。这种结构特别适合处理需要存储多个字符串的场景,比如学生姓名列表、商品名称集合等。
定义格式如下:
c复制char 数组名[行数][列数] = {初始化列表};
这里的"行数"表示要存储的字符串数量,"列数"表示每个字符串的最大长度(包括结尾的'\0')。例如,要存储5个最大长度为20的字符串:
c复制char names[5][21]; // 多留一个位置给'\0'
注意:列数必须足够大以容纳最长的字符串加上终止符'\0',否则会导致缓冲区溢出。
1.2 初始化方式
二维字符数组有多种初始化方式:
- 完全初始化:
c复制char fruits[3][6] = {
{'a','p','p','l','e','\0'},
{'p','e','a','r','\0','\0'},
{'b','a','n','a','n','a'}
};
- 字符串字面量初始化(更简洁):
c复制char fruits[3][6] = {
"apple",
"pear",
"banana"
};
- 部分初始化(未指定元素自动初始化为0):
c复制char matrix[4][10] = {
"hello",
"world"
}; // 后两行全为'\0'
- 动态初始化(运行时赋值):
c复制char cities[5][20];
strcpy(cities[0], "Beijing");
strcpy(cities[1], "Shanghai");
// ...
1.3 访问与操作
访问二维字符数组的元素有两种方式:
- 单个字符访问:
c复制char ch = names[2][4]; // 获取第3个字符串的第5个字符
- 整行(字符串)访问:
c复制printf("%s", names[1]); // 输出第2个字符串
常见操作示例:
c复制// 比较两个字符串
if(strcmp(names[0], names[1]) == 0) {
printf("两个名字相同\n");
}
// 字符串排序(按字母顺序)
for(int i = 0; i < 4; i++) {
for(int j = i+1; j < 5; j++) {
if(strcmp(names[i], names[j]) > 0) {
char temp[21];
strcpy(temp, names[i]);
strcpy(names[i], names[j]);
strcpy(names[j], temp);
}
}
}
重要提示:直接使用赋值运算符(=)无法复制字符串,必须使用strcpy()函数。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 函数基础与进阶
2.1 函数的基本概念
函数是C语言中的基本模块化单元,具有以下核心优势:
- 代码复用:避免重复编写相同
