C 语言中的数组
在 C 语言中,数组是存储多个相同类型数据的集合。数组的每个元素通过索引来访问,索引从 0 开始。数组是存储数据的基础数据结构之一,广泛应用于数据处理和算法实现。
1. 数组的定义
数组定义的语法格式为:
type array_name[array_size];
- type:数组中每个元素的类型。
- array_name:数组的名称,用于标识数组。
- array_size:数组中元素的个数,必须是常量表达式。
示例:定义一个整数类型的数组
int arr[5]; // 定义一个包含 5 个整数元素的数组
在上述示例中,arr 是一个可以存储 5 个整数的数组。
2. 数组的初始化
数组可以在定义时进行初始化,也可以在后续赋值。数组初始化的两种方式如下:
2.1 静态初始化
静态初始化即在定义数组时直接赋值。数组中的元素按顺序初始化,如果初始化元素少于数组的大小,剩余的元素会被默认赋值为 0。
int arr[5] = {1, 2, 3, 4, 5}; // 定义并初始化一个包含 5 个元素的整数数组
如果初始化时没有为所有元素指定值,未指定的元素会被自动赋值为 0:
int arr[5] = {1, 2}; // 数组 arr 的前两个元素被赋值为 1 和 2,其余元素为 0
2.2 动态初始化
动态初始化是通过在程序运行时逐个赋值给数组元素。
int arr[5];
arr[0] = 1; // 数组第一个元素赋值为 1
arr[1] = 2; // 数组第二个元素赋值为 2
arr[2] = 3; // 数组第三个元素赋值为 3
arr[3] = 4; // 数组第四个元素赋值为 4
arr[4] = 5; // 数组第五个元素赋值为 5
3. 访问数组元素
数组元素是通过索引访问的,索引从 0 开始。例如,第一个元素的索引是 0,第二个元素的索引是 1,依此类推。
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
printf("数组的第一个元素:%d\n", arr[0]);
printf("数组的第三个元素:%d\n", arr[2]);
return 0;
}
输出:
数组的第一个元素:1
数组的第三个元素:3
4. 多维数组
C 语言支持多维数组。常见的多维数组是二维数组,表示矩阵或表格结构。二维数组定义的语法如下:
type array_name[row_size][column_size];
- row_size:数组的行数。
- column_size:数组的列数。
示例:二维数组的定义与初始化
#include <stdio.h>
int main() {
int arr[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
// 访问二维数组元素
printf("arr[0][0] = %d\n", arr[0][0]);
printf("arr[1][2] = %d\n", arr[1][2]);
return 0;
}
输出:
arr[0][0] = 1
arr[1][2] = 6
4.1 动态二维数组
C 语言中的二维数组实际上是一个数组的数组。在动态内存分配的情况下,我们可以使用 malloc 或 calloc 来分配二维数组。
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows = 2, cols = 3;
int **arr = (int **)malloc(rows * sizeof(int *)); // 分配行指针数组
for (int i = 0; i < rows; i++) {
arr[i] = (int *)malloc(cols * sizeof(int)); // 为每一行分配内存
}
// 初始化数组
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;
// 打印数组
printf("arr[0][0] = %d\n", arr[0][0]);
printf("arr[1][2] = %d\n", arr[1][2]);
// 释放内存
for (int i = 0; i < rows; i++) {
free(arr[i]);
}
free(arr);
return 0;
}
输出:
arr[0][0] = 1
arr[1][2] = 6
5. 数组的指针
在 C 语言中,数组的名称可以视为指向数组第一个元素的指针。通过指针也可以访问数组中的元素。
示例:数组与指针的关系
#include <stdio.h>
int main() {
int arr[3] = {10, 20, 30};
int *p = arr; // p 指向数组的第一个元素
printf("p[0] = %d\n", p[0]); // 使用指针访问数组元素
printf("*(p + 1) = %d\n", *(p + 1)); // 使用指针偏移访问数组元素
return 0;
}
输出:
p[0] = 10
*(p + 1) = 20
在这个例子中,arr 是一个数组,p 是一个指针,指向数组的第一个元素。通过 p[0] 或者 *(p + 1) 可以访问数组的元素。
6. 数组的大小
可以使用 sizeof 运算符来获取数组的大小(即元素个数)。需要注意的是,sizeof 返回的是字节数,因此在获取数组元素个数时,需要将字节数除以单个元素的字节大小。
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]); // 计算数组的元素个数
printf("数组的元素个数:%d\n", size);
return 0;
}
输出:
数组的元素个数:5
总结
- 数组定义:数组是一个固定大小的连续内存块,用于存储相同类型的元素。
- 初始化:数组可以静态初始化或动态初始化。
- 访问元素:通过索引访问数组的元素,索引从 0 开始。
- 多维数组:C 语言支持二维及更高维度的数组,通常用于表示矩阵或表格。
- 数组与指针:数组名作为指针使用,指针可以通过偏移访问数组元素。
- 数组大小:可以通过
sizeof运算符来获取数组的大小(元素个数)。