一、C 数组
在C语言中,数组是一种数据结构,用于存储相同类型的元素的集合。数组的大小在创建时确定,并且在整个数组的生命周期内保持不变。C语言中的数组是静态的,意味着一旦创建,就不能改变其大小。
1. 声明数组
在C语言中,你可以使用以下语法声明数组:
其中:
- type 是数组中元素的类型(如 int、float、char 等)。
- arrayName 是数组的名称。
- size 是数组的大小,表示数组可以容纳的元素数量。
2. 初始化数组
你可以在声明数组的同时初始化它: - int numbers[] = {1, 2, 3, 4, 5}; // 隐式指定大小
- int days[7] = {1, 2, 3, 4, 5, 6, 7}; // 显式指定大小
复制代码
3. 访问数组元素
你可以使用索引来访问数组中的元素。在C语言中,数组的索引从0开始。以下是如何访问数组元素的示例: - #include <stdio.h>
- int main() {
- int numbers[] = {1, 2, 3, 4, 5};
- printf("The first element is: %d\n", numbers[0]);
- printf("The last element is: %d\n", numbers[4]);
- return 0;
- }
复制代码
4. 数组越界
C语言不会检查你是否访问了数组的有效范围。如果你试图访问一个不存在的数组元素(即索引超出了数组的大小),你将会得到一个未定义的行为,这可能导致程序崩溃或产生意外的结果。因此,当使用数组时,务必确保不要越界。
5. 多维数组
C语言还支持多维数组,如二维数组和三维数组等。二维数组通常用于表示矩阵或表格。以下是一个二维数组的示例: - #include <stdio.h>
- int main() {
- int matrix[3][3] = {
- {1, 2, 3},
- {4, 5, 6},
- {7, 8, 9}
- };
- printf("Element at row 1, column 2 is: %d\n", matrix[1][2]);
- return 0;
- }
复制代码
二、C 操作数组的方法有哪些
在C语言中,操作数组的方法通常包括以下几个基本类别:
- 数组声明与初始化:
- 声明一个数组时,需要指定数组的类型和大小。
- 可以在声明的同时初始化数组,也可以后续逐个赋值。
- int array[10]; // 声明一个大小为10的整型数组
- int array2[5] = {1, 2, 3, 4, 5}; // 声明并初始化一个整型数组
复制代码
- 数组元素访问:
- 使用索引(下标)来访问数组中的元素。索引从0开始。
- int value = array[2]; // 访问数组的第三个元素(因为索引从0开始)
复制代码
- 遍历数组:
- 使用循环结构(如for循环、while循环)遍历数组的每个元素。
- for (int i = 0; i < 10; i++) {
- printf("%d ", array[i]);
- }
复制代码
- 修改数组元素:
- array[2] = 100; // 修改数组的第三个元素为100
复制代码
- 数组作为函数参数:
- 可以将数组作为参数传递给函数,但通常需要传递数组的首地址和大小(因为C语言中的数组名实际上是首元素的地址)。
- void printArray(int arr[], int size) {
- for (int i = 0; i < size; i++) {
- printf("%d ", arr[i]);
- }
- }
复制代码
- 数组与字符串:
- C语言中的字符串实际上是字符数组。可以使用字符数组来存储和操作字符串。
- char str[10] = "Hello"; // 声明并初始化一个字符数组(字符串)
复制代码
- 数组排序:
- 使用各种排序算法(如冒泡排序、选择排序、插入排序、快速排序等)对数组进行排序。
- // 示例:冒泡排序
- void bubbleSort(int arr[], int n) {
- // ... 排序算法的实现 ...
- }
复制代码
- 数组搜索:
- 实现各种搜索算法(如线性搜索、二分搜索等)来在数组中查找特定元素。
- // 示例:线性搜索
- int linearSearch(int arr[], int n, int target) {
- for (int i = 0; i < n; i++) {
- if (arr[i] == target) {
- return i; // 找到目标元素,返回其索引
- }
- }
- return -1; // 未找到目标元素
- }
复制代码
- 多维数组:
- int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // 声明并初始化一个二维数组
复制代码
- 动态数组:
- C语言本身不支持动态数组(在运行时改变大小),但可以使用指针和动态内存分配(如malloc和free)来模拟动态数组的行为。
- int *dynamicArray = malloc(10 * sizeof(int)); // 动态分配内存
- // ... 使用数组 ...
- free(dynamicArray); // 释放内存
复制代码
三、C 数组-应用场景
C 数组在编程中有广泛的应用场景,包括但不限于存储固定数量的数据、实现算法(如排序、搜索等)、处理数据集合等。以下是一些具体的应用场景和相应的详细案例代码。
1. 存储固定数量的数据
假设我们要存储一个班级中所有学生的成绩。 - #include <stdio.h>
- int main() {
- // 假设班级有10个学生
- int grades[10];
- // 假设我们已经有了学生的成绩
- for (int i = 0; i < 10; i++) {
- grades[i] = 80 + i; // 为了示例,我们简单地给每个学生一个递增的成绩
- }
- // 打印所有学生的成绩
- for (int i = 0; i < 10; i++) {
- printf("Student %d's grade: %d\n", i + 1, grades[i]);
- }
- return 0;
- }
复制代码
2. 实现算法(如排序)
使用数组来实现冒泡排序算法。 - #include <stdio.h>
- void bubbleSort(int arr[], int n) {
- for (int i = 0; i < n - 1; i++) {
- for (int j = 0; j < n - i - 1; j++) {
- if (arr[j] > arr[j + 1]) {
- // 交换 arr[j] 和 arr[j + 1]
- int temp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = temp;
- }
- }
- }
- }
- int main() {
- int arr[] = {64, 34, 25, 12, 22, 11, 90};
- int n = sizeof(arr) / sizeof(arr[0]);
- bubbleSort(arr, n);
- printf("Sorted array: \n");
- for (int i = 0; i < n; i++) {
- printf("%d ", arr[i]);
- }
- printf("\n");
- return 0;
- }
复制代码
3. 处理数据集合
假设我们有一个整数数组,我们需要找出数组中的最大值和最小值。 - #include <stdio.h>
- int main() {
- int arr[] = {5, 1, 9, 3, 7};
- int n = sizeof(arr) / sizeof(arr[0]);
- int min = arr[0], max = arr[0];
- // 遍历数组找到最大值和最小值
- for (int i = 1; i < n; i++) {
- if (arr[i] < min) {
- min = arr[i];
- }
- if (arr[i] > max) {
- max = arr[i];
- }
- }
- printf("Minimum element in array is %d\n", min);
- printf("Maximum element in array is %d\n", max);
- return 0;
- }
复制代码
这些示例展示了 C 数组在不同场景中的应用,从简单的数据存储到复杂的算法实现。
四、相关链接
- Visual Studio Code下载地址
- Sublime Text下载地址
- 「C系列」C 简介
- 「C系列」C 基本语法
- 「C系列」C 数据类型
- 「C系列」C 变量及常见问题梳理
- 「C系列」C 常量
- 「C系列」C 存储类
- 「C系列」C 运算符
- 「C系列」C 判断/循环
- 「C系列」C 函数
- 「C系列」C 作用域规则
|