c语言数组
1. 数组的定义与初始化
数组在使用前需要先定义,其定义方式为指定元素类型、数组名以及元素个数。下面是几种常见的数组定义和初始化方式:
// 定义一个包含5个整数的数组
int numbers[5];
// 初始化数组
int primes[5] = {2, 3, 5, 7, 11}; // 完全初始化
int squares[5] = {1, 4, 9}; // 部分初始化,剩余元素自动设为0
int zeros[5] = {0}; // 所有元素初始化为0
// 通过初始化器自动确定数组长度
int values[] = {10, 20, 30, 40}; // 数组长度为4
2. 数组元素的访问
数组元素可以通过下标来访问,C 语言数组的下标是从 0 开始的。例如:
int numbers[5] = {10, 20, 30, 40, 50};
// 访问数组元素
printf("%d\n", numbers[0]); // 输出:10
printf("%d\n", numbers[3]); // 输出:40
// 修改数组元素
numbers[2] = 300;
printf("%d\n", numbers[2]); // 输出:300
3. 多维数组
C 语言支持多维数组,最常见的是二维数组,它常被用来表示矩阵。
// 定义一个3行4列的二维数组
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 访问二维数组元素
printf("%d\n", matrix[1][2]); // 输出:7
// 使用嵌套循环遍历二维数组
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
4. 数组作为函数参数
在 C 语言中,数组作为参数传递给函数时,会退化为指针。
// 函数声明,接收一个整型数组和数组长度
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
printArray(numbers, 5); // 传递数组和数组长度
return 0;
}
5. 字符数组与字符串
在 C 语言中,字符串是用字符数组来表示的,并且以空字符'\0'结尾。
// 定义字符串的两种方式
char str1[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
char str2[] = "Hello"; // 自动添加'\0'
// 字符串处理函数示例
#include <string.h>
int len = strlen(str2); // 计算字符串长度
char dest[10];
strcpy(dest, str2); // 复制字符串
strcat(dest, " World"); // 连接字符串
printf("%s\n", dest); // 输出:Hello World
6. 数组越界问题
在访问数组时,要确保使用的下标在有效范围内(0 到 数组长度 - 1),否则会引发未定义行为。
int arr[3] = {1, 2, 3};
printf("%d\n", arr[3]); // 错误:越界访问,可能导致程序崩溃
7. 数组与指针的关系
数组名在多数表达式中会被转换为指向数组首元素的指针。
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // 等价于 int *ptr = &arr[0];
printf("%d\n", *ptr); // 输出:1
printf("%d\n", *(ptr + 2)); // 输出:3,等价于 arr[2]
8. 常见错误与注意事项
- 数组长度必须是编译时常量表达式。
int n = 5;
int arr[n]; // C99之前不允许,C99引入了可变长度数组(VLA)
- 数组作为函数参数时,无法直接获取数组长度,需额外传递长度参数。
- 字符数组处理字符串时,要确保有足够空间存储空字符
'\0'。

浙公网安备 33010602011771号