在C语言中,数组是一种非常重要的数据结构,用于存储一组相同类型的元素。数组可以帮助我们高效地管理大量数据,是C语言编程中不可或缺的工具。下面我们将从基础概念、定义、初始化、访问和常见操作等方面,详细讲解数组。
1.什么是数组?
- 数组是一种连续的内存块,用于存储多个相同类型的元素。
- 数组中的每个元素可以通过索引(下标)来访问。
- 数组的大小在定义时确定,且不能动态改变。
2.数组的定义
在C语言中,数组的定义语法如下:
数据类型 数组名[数组大小];
- 数据类型:数组中元素的类型,例如int、float、char等。
- 数组名:数组的名称,遵循标识符的命名规则。
- 数组大小:数组中元素的个数,必须是一个常量。
- 示例
int numbers[5]; // 定义一个包含5个整数的数组
float scores[10]; // 定义一个包含10个浮点数的数组
char name[20]; // 定义一个包含20个字符的数组
3.数组的初始化
数组可以在定义时初始化,也可以在定义后逐个赋值。
- 定义时初始化
int numbers[5] = {1, 2, 3, 4, 5}; // 完全初始化
int numbers[5] = {1, 2}; // 部分初始化,未初始化的元素默认为0
int numbers[] = {1, 2, 3, 4, 5}; // 省略数组大小,编译器自动推断
- 定义后赋值
int numbers[5];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;
4.访问数组元素
数组元素通过索引访问,索引从0开始,到数组大小-1结束。
- 语法
数组名[索引];
- 示例
int numbers[5] = {10, 20, 30, 40, 50};
printf("%d\n", numbers[0]); // 输出:10
printf("%d\n", numbers[2]); // 输出:30
numbers[3] = 100; // 修改第4个元素的值
5.数组的遍历
遍历数组是指依次访问数组中的每个元素。通常使用for循环来实现。
- 示例
int numbers[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
printf("%d ", numbers[i]);
}
// 输出:10 20 30 40 50
6.多维数组
C语言支持多维数组,最常见的是二维数组(矩阵)。
- 二维数组的定义
数据类型 数组名[行数][列数];
- 示例
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
- 二维数组的访问
printf("%d\n", matrix[1][2]); // 输出:6
- 二维数组的遍历
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
// 输出:
// 1 2 3
// 4 5 6
// 7 8 9
7.数组的常见操作
- 计算数组长度
可以使用sizeof运算符计算数组的长度:
int numbers[] = {1, 2, 3, 4, 5};
int length = sizeof(numbers) / sizeof(numbers[0]);
printf("数组长度:%d\n", length); // 输出:5
- 数组作为函数参数
数组可以作为函数参数传递,通常需要同时传递数组的大小。
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
}
int main() {
int numbers[] = {1, 2, 3, 4, 5};
printArray(numbers, 5);
return 0;
}
8.数组的注意事项
- 索引越界:
访问数组时,索引不能超出数组的范围,否则会导致未定义行为。
例如:
int numbers[5] = {1, 2, 3, 4, 5};
printf("%d\n", numbers[5]); // 错误:索引越界
- 数组名是常量指针:
数组名表示数组的首地址,是一个常量指针,不能修改。
例如:
int numbers[5];
numbers = NULL; // 错误:数组名是常量,不能修改
- 数组的大小必须是常量:
在标准C语言中,数组的大小必须是编译时常量。
例如:
int size = 5;
int numbers[size]; // 错误:size 不是常量(C99之前)
9.总结
- 数组:用于存储一组相同类型的元素,通过索引访问。
- 定义:数据类型 数组名[大小];
- 初始化:可以在定义时初始化,也可以逐个赋值。
- 遍历:使用for循环遍历数组。
- 多维数组:常见的是二维数组,用于表示矩阵。
- 注意事项:避免索引越界,数组名是常量指针。