1. 数组概述
数组是一种数据结构,它由一系列相同类型的元素组成并按照一定顺序存储在连续的内存空间中。C语言中的数组可以存储各种数据类型,如整数、字符、浮点数等,数组的大小可以在定义时指定,也可以在运行时动态分配。
1.1 数组的定义
在C语言中,数组的定义格式如下:
数据类型 数组名[数组长度];
其中,数据类型指的是数组中元素的数据类型,数组名是数组的标识符,数组长度指的是数组中元素的个数。
例如,定义一个可以存储5个整数的数组:
int nums[5];
1.2 数组的赋值
在C语言中,可以使用下标运算符 [] 来访问数组中的元素,并对数组进行赋值。
例如,将数组 nums 中的第一个元素赋值为 10:
nums[0] = 10;
数组的下标从 0 开始,因此 nums[0] 表示第一个元素。
数组还可以通过循环语句来批量赋值。
例如,将数组 nums 的所有元素赋值为 0:
for (int i = 0; i < 5; i++) {
nums[i] = 0;
}
2. 数组的初始化
在定义数组时,可以同时为其进行初始化。数组的初始化可以使用花括号 {},并用逗号 ',' 分隔不同元素的值。
例如,定义一个整型数组并初始化:
int nums[5] = {10, 20, 30, 40, 50};
如果只对部分元素进行初始化,则未初始化的元素会被自动赋值为 0。
例如,定义一个整型数组,只对前三个元素进行初始化:
int nums[5] = {10, 20, 30};
则数组 nums 的后两个元素会被自动赋值为 0。
也可以只对第一个元素进行初始化,其余元素会被自动赋值为 0。
例如,定义一个整型数组,只对第一个元素进行初始化:
int nums[5] = {10};
则数组 nums 的后四个元素会被自动赋值为 0。
3. 数组的使用
数组在程序中的使用非常广泛,常见的应用场景包括统计数据、排序、存储字符串等。
3.1 数组操作
对于已经定义的数组,可以对其进行各种操作,如读取元素、修改元素、计算数组元素的和、计算数组元素的平均值等。
例如,计算数组 nums 中所有元素的和:
int sum = 0;
for (int i = 0; i < 5; i++) {
sum += nums[i];
}
例如,计算数组 nums 中所有元素的平均值:
float avg;
int sum = 0;
for (int i = 0; i < 5; i++) {
sum += nums[i];
}
avg = (float)sum / 5;
3.2 多维数组
在C语言中,可以定义多维数组。多维数组可以被看作是数组的数组,每个元素都是一个数组。
例如,定义一个二维数组:
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
可以使用两个循环分别遍历多维数组的行与列:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
// 访问二维数组的元素
printf("%d ", matrix[i][j]);
}
printf("\n");
}
4. 数组的注意事项
在使用数组时需要注意以下几点:
4.1 数组下标越界
在使用数组时要避免数组下标越界,即访问超出数组范围的元素。下标越界会导致程序崩溃或产生不可预测的结果。
例如,访问数组 nums 的第100个元素:
int nums[5];
int num = nums[100]; // 会导致程序崩溃
4.2 数组长度不可变
在定义数组时,数组长度是固定不变的。如果业务需求发生变化,需要修改数组长度,则需要手动修改代码并重新编译程序。
例如,将数组 nums 的长度从 5 改为 10,需要修改程序中所有使用 nums 数组的地方,并重新编译程序。
4.3 数组参数传递
在函数中使用数组作为参数时,由于数组本身就是一个指针,因此函数中的操作会影响到原数组。
例如,定义一个函数对数组进行排序:
void sort(int arr[], int length) {
// 对数组进行排序
}
在函数中对数组排序后,原数组也会被修改。
5. 总结
在C语言中,数组是一种非常重要的数据结构。数组可以存储各种数据类型,可以动态分配或静态定义。数组可以通过下标运算符 [] 访问元素,并通过循环语句进行遍历和操作。多维数组可以看作是数组的数组。使用数组时需要注意避免数组下标越界,需注意数组长度不可变,函数中的数组操作会影响到原数组。