关于数组的相关知识
C语言数组基础讲解
什么是数组?
数组(Array)是相同数据类型元素的有序集合,通过一个名称来存储多个同类型数据。当我们需要处理大量相似数据时(例如:50个学生的成绩),使用数组可以避免定义大量独立变量。
数组的声明
数据类型 数组名[数组长度];
- 示例:
int scores[5];// 声明一个存储5个整数的数组 - 数组长度必须是整型常量
- 数组元素在内存中连续存储
数组初始化
方式一:声明时初始化
int arr1[5] = {1, 2, 3, 4, 5}; // 完全初始化
int arr2[5] = {1, 2}; // 部分初始化,剩余元素自动补0
int arr3[] = {1, 3, 5}; // 自动确定长度为3
方式二:先声明后赋值
int arr[3];
arr[0] = 10; // 通过下标访问元素
arr[1] = 20;
arr[2] = 30;
⚠️ 注意事项:
- 初始值数量不能超过数组长度
- 数组创建后不能整体赋值
访问数组元素
- 使用下标运算符
[ ]访问元素 - 数组下标从
0开始计数 - 有效下标范围:
0到数组长度-1
int numbers[4] = {8, 3, 5, 2};
printf("%d", numbers[0]); // 输出第一个元素:8
numbers[1] = 7; // 修改第二个元素
数组遍历
使用循环结构处理数组元素:
int main() {
int arr[5];
// 输入数组元素
for(int i=0; i<5; i++){
scanf("%d", &arr[i]);
}
// 输出数组元素
for(int i=0; i<5; i++){
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
常见错误
- 下标越界:
int arr[3] = {1,2,3};
printf("%d", arr[3]); // 错误!有效下标是0-2
- 错误初始化:
int arr[2] = {1,2,3}; // 错误:初始值过多
- 错误的下标认知:
int arr[5];
arr[5] = 10; // 最后一个元素应该是arr[4]
二维数组(拓展)
int matrix[3][4]; // 3行4列的二维数组
// 初始化:
int matrix[2][3] = {{1,2,3}, {4,5,6}};
数组的优势
- 提高数据管理效率
- 方便批量处理数据
- 为后续学习字符串、排序算法等打下基础
📝 练习建议:
- 尝试编写程序计算数组元素之和
- 实现查找数组中的最大值
字符串基础
字符串的本质
在C语言中,字符串实际上是字符数组的特殊形式:
- 使用
char类型的数组存储 - 以空字符
'\0'(ASCII码0)作为结束标志 - 需要比实际字符多1个元素的存储空间
字符串的声明与初始化
方式一:字符数组形式
char str1[6] = {'H','e','l','l','o','\0'}; // 显式包含\0
char str2[6] = "Hello"; // 自动添加\0
char str3[] = "C Language"; // 自动计算长度(包含\0)
方式二:字符串字面量
char str4[] = "Hello World"; // 推荐写法
字符串的输入输出
使用格式说明符%s
char name[20];
printf("请输入姓名:");
scanf("%s", name); // 注意不需要&符号
printf("欢迎%s!", name);
特殊处理
char str[] = "Hello";
printf("%s", str); // 输出直到遇到\0
printf("%c", str[1]); // 输出单个字符'e'
字符串的常用操作
字符串长度(不包含\0)
int length = 0;
char str[] = "Hello";
while(str[length] != '\0') {
length++;
}
printf("长度:%d", length); // 输出5
字符串比较
char str1[] = "apple";
char str2[] = "apple";
int i = 0;
while(str1[i] == str2[i]) {
if(str1[i] == '\0') {
printf("字符串相等");
break;
}
i++;
}
字符串复制
char src[] = "Hello";
char dest[6];
int i = 0;
while(src[i] != '\0') {
dest[i] = src[i];
i++;
}
dest[i] = '\0'; // 必须添加结束符
常见字符串函数(需包含<string.h>)
| 函数 | 功能 | 示例 |
|---|---|---|
strlen(str) |
返回字符串长度 | int len = strlen("abc"); |
strcpy(dest, src) |
字符串复制 | strcpy(s1, s2); |
strcat(dest, src) |
字符串拼接 | strcat(s1, "end"); |
strcmp(s1, s2) |
字符串比较 | if(strcmp(s1, s2) == 0) |
重要注意事项
- 数组长度必须足够:
char s[5] = "hello"; // 错误!需要6个字符空间(含\0)
- 结束符的重要性:
char s[5] = {'a','b','c'}; // 不是合法字符串(缺少\0)
printf("%s", s); // 可能输出乱码
- 输入注意事项:
scanf("%s", str); // 遇到空格会停止读取
- 不能直接赋值:
char s1[10], s2[10];
s1 = "hello"; // 错误!
s1 = s2; // 错误!
字符串与字符数组的区别
| 字符数组 | 字符串 | |
|---|---|---|
| 结束标志 | 不需要 | 必须有'\0' |
| 输出 | 需要逐个字符处理 | 可使用%s整体输出 |
| 函数处理 | 需要自定义逻辑 | 可用字符串函数 |
📝 练习建议:
- 实现字符串逆序存储
- 统计字符串中数字字符的数量
- 实现两个字符串的拼接(不使用strcat)
- 查找某个字符在字符串中的位置

浙公网安备 33010602011771号