在C语言中,数组是一种用于存储多个同类型数据的集合,其基本特性和使用方法如下:
1. 数组的定义和初始化
数组由一系列相同类型的元素构成,可以通过如下方式定义和初始化:
// 定义数组
int arr[5]; // 创建一个可以存储5个整数的数组
可以在定义时初始化数组:
int arr[5] = {
1, 2, 3, 4, 5}; // 定义并初始化数组
如果省略数组大小,编译器会根据初始化列表的元素数量自动确定大小:
int arr[] = {
1, 2, 3, 4, 5}; // 自动确定大小,大小为5
2. 数组索引
数组的索引从0开始,可以通过下标访问各个元素:
int first = arr[0]; // 访问第一个元素
arr[2] = 10; // 修改第三个元素的值为10
3. 多维数组
C语言支持多维数组,一般使用二维数组较为常见:
int matrix[3][4]; // 创建一个3行4列的二维数组
初始化二维数组的方式:
int matrix[2][3] = {
{
1, 2, 3},
{
4, 5, 6}
};
4. 数组与指针
数组名在表达式中通常被视为指向第一个元素的指针:
int *p = arr; // p指向数组的第一个元素
可以通过指针实现数组的遍历:
for (int i = 0; i < 5; i++) {
printf("%d ", *(p + i)); // 通过指针访问数组元素
}
5. 数组的大小
可以使用sizeof
运算符计算数组的大小(以字节为单位):
size_t size = sizeof(arr); // 数组的总字节数
size_t length = sizeof(arr) / sizeof(arr[0]); // 数组中元素的个数
6. 数组的传递
在C语言中,数组不能直接作为函数参数传递,实际上传递的是指向数组第一个元素的指针:
void function(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
}
int main() {
int arr[] = {
1, 2, 3, 4, 5};
function(arr, 5); // 传递数组
}
7. 数组的限制
- 数组的大小在定义时必须是常量(不可变量),不能在运行时动态改变。
- 数组元素之外的访问会导致未定义行为(如越界)。
- C语言不提供数组的内置边界检查,因此访问边界外的元素可能导致程序崩溃或数据错误。
8. 常见操作
- 遍历:使用循环结构访问和修改数组元素。
- 排序:可以使用冒泡排序、选择排序等经典算法对数组进行排序。
- 查找:可以实现线性查找或二分查找等算法来查找数组中的元素。
9. 嵌套数组和结构体
可以将数组嵌套在结构体中,增加数据的复杂性:
typedef struct {
char name[30];
int scores[5];
} Student;