1. 数组的基本概念:为什么需要数组?
在编程中,我们经常需要处理大量同类型的数据。假设你要编写一个学生成绩管理系统,需要记录100名学生的数学成绩。如果使用普通变量,你需要声明100个int变量:score1, score2, ..., score100。这不仅代码冗长,而且难以维护。
数组就是为了解决这类问题而生的数据结构。它是一组相同类型元素的集合,这些元素在内存中连续存放,通过一个统一的数组名和下标(索引)来访问特定元素。
数组的核心优势在于:
- 统一管理大量同类型数据
- 便于批量处理(如循环遍历)
- 代码简洁,逻辑清晰
举个例子,用数组存储5个学生的成绩:
c复制int scores[5] = {90, 85, 78, 92, 88};
这样只需要一个变量名scores,就能管理所有学生的成绩。
注意:C语言中数组的下标从0开始,这与一些其他编程语言(如MATLAB)不同,初学者需要特别注意。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数组的声明与初始化
2.1 数组声明语法
在C语言中,声明数组的基本语法是:
c复制数据类型 数组名[数组长度];
例如:
c复制int numbers[10]; // 声明一个包含10个整数的数组
float temps[24]; // 声明一个包含24个浮点数的数组
char name[20]; // 声明一个包含20个字符的数组
2.2 数组初始化
数组可以在声明时初始化:
c复制int primes[5] = {2, 3, 5, 7, 11};
如果初始化值少于数组长度,剩余元素会自动初始化为0:
c复制int nums[5] = {1, 2, 3}; // nums[3]和nums[4]自动为0
也可以不指定长度,编译器会根据初始化值的数量自动确定:
c复制int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
提示:在C99标准中,还支持指定初始化器(designated initializers):
c复制int arr[10] = {[3] = 100, [7] = 200};这样可以直接初始化特定位置的元素,其他位置默认为0。
3. 数组元素的访问
3.1 基本访问方式
数组元素通过下标访问,语法为:
c复制数组名[下标]
例如:
c复制int scores[5] = {90, 85, 78, 92, 88};
printf("%d", scores[0]); // 输出第一个元素:90
scores[2] = 80; // 修改第三个元素
3.2 数组与指针的关系
在C语言中,数组名实际上是一个指向数组首元素的指针。因此:
c复制int arr[5];
arr == &arr[0]; // 这个表达式为真
这意味着我们可以用指针的方式来操作数组:
c复制int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
printf("%d", *(p + 2)); // 输出arr[2]的值:3
注意:虽然数组名可以看作指针,但它不是左值
