当前位置: 首页 > news >正文

「C系列」C 数组

文章目录

  • 一、C 数组
    • 1. 声明数组
    • 2. 初始化数组
    • 3. 访问数组元素
    • 4. 数组越界
    • 5. 多维数组
  • 二、C 操作数组的方法有哪些
  • 三、C 数组-应用场景
    • 1. 存储固定数量的数据
    • 2. 实现算法(如排序)
    • 3. 处理数据集合
  • 四、相关链接

一、C 数组

在C语言中,数组是一种数据结构,用于存储相同类型的元素的集合。数组的大小在创建时确定,并且在整个数组的生命周期内保持不变。C语言中的数组是静态的,意味着一旦创建,就不能改变其大小。

1. 声明数组

在C语言中,你可以使用以下语法声明数组:

type arrayName[size];

其中:

  • type 是数组中元素的类型(如 intfloatchar 等)。
  • 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语言中,操作数组的方法通常包括以下几个基本类别:

  1. 数组声明与初始化
  • 声明一个数组时,需要指定数组的类型和大小。
  • 可以在声明的同时初始化数组,也可以后续逐个赋值。
int array[10]; // 声明一个大小为10的整型数组
int array2[5] = {1, 2, 3, 4, 5}; // 声明并初始化一个整型数组
  1. 数组元素访问
  • 使用索引(下标)来访问数组中的元素。索引从0开始。
int value = array[2]; // 访问数组的第三个元素(因为索引从0开始)
  1. 遍历数组
  • 使用循环结构(如for循环、while循环)遍历数组的每个元素。
for (int i = 0; i < 10; i++) {printf("%d ", array[i]);
}
  1. 修改数组元素
  • 直接使用索引和赋值运算符来修改数组中的元素。
array[2] = 100; // 修改数组的第三个元素为100
  1. 数组作为函数参数
  • 可以将数组作为参数传递给函数,但通常需要传递数组的首地址和大小(因为C语言中的数组名实际上是首元素的地址)。
void printArray(int arr[], int size) {for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}
}
  1. 数组与字符串
  • C语言中的字符串实际上是字符数组。可以使用字符数组来存储和操作字符串。
char str[10] = "Hello"; // 声明并初始化一个字符数组(字符串)
  1. 数组排序
  • 使用各种排序算法(如冒泡排序、选择排序、插入排序、快速排序等)对数组进行排序。
// 示例:冒泡排序
void bubbleSort(int arr[], int n) {// ... 排序算法的实现 ...
}
  1. 数组搜索
  • 实现各种搜索算法(如线性搜索、二分搜索等)来在数组中查找特定元素。
// 示例:线性搜索
int linearSearch(int arr[], int n, int target) {for (int i = 0; i < n; i++) {if (arr[i] == target) {return i; // 找到目标元素,返回其索引}}return -1; // 未找到目标元素
}
  1. 多维数组
  • 可以声明和操作多维数组,如二维数组、三维数组等。
int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // 声明并初始化一个二维数组
  1. 动态数组
  • C语言本身不支持动态数组(在运行时改变大小),但可以使用指针和动态内存分配(如mallocfree)来模拟动态数组的行为。
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 数组在不同场景中的应用,从简单的数据存储到复杂的算法实现。

四、相关链接

  1. Visual Studio Code下载地址
  2. Sublime Text下载地址
  3. 「C系列」C 简介
  4. 「C系列」C 基本语法
  5. 「C系列」C 数据类型
  6. 「C系列」C 变量及常见问题梳理
  7. 「C系列」C 常量
  8. 「C系列」C 存储类
  9. 「C系列」C 运算符
  10. 「C系列」C 判断/循环
  11. 「C系列」C 函数
  12. 「C系列」C 作用域规则
http://www.lryc.cn/news/369117.html

相关文章:

  • Python框架scrapy有什么天赋异禀
  • 【ROS2大白话】四、ROS2非常简单的传参方式
  • 浅谈mysql 的批量delete 和 使用in条件批量删除问题
  • 【Spring Boot】过滤敏感词的两种实现
  • 在 Zustand 中管理状态能使用类(Class)吗
  • MoreTable 方法selectWithFun,count 使用实例
  • 【SpringBoot】在Spring中使用自定义条件类在Java声明Bean时实现条件注入
  • 网卡聚合链路配置
  • PlantSimulation导入cad图作为背景
  • 【大模型】个人对大模型选择的见解
  • java的反射和python的鸭子类型
  • 爬虫工具yt-dlp
  • 【代码随想录训练营】【Day 50】【动态规划-9】| Leetcode 198, 213, 337
  • 源码讲解kafka 如何使用零拷贝技术(zero-copy)
  • Ubuntu20.04配置qwen0.5B记录
  • java自学阶段二:JavaWeb开发--day80(项目实战2之苍穹外卖)
  • HPUX系统Oracle RAC如何添加ASM磁盘
  • Jmeter 压力测测试的简单入门
  • N叉树的层序遍历-力扣
  • 解决阿里云的端口添加安全组仍然无法扫描到
  • 【因果推断python】26_双重稳健估计1
  • C语言 图形化界面方式连接MySQL【C/C++】【图形化界面组件分享】
  • Unity DOTS技术(十五) 物理系统
  • Java线程安全
  • Solidity选择使用 require 语句还是条件语句结合手动触发 revert 操作?回滚交易和抛出异常如何选择?
  • SpringCloud 网关配置websocket
  • 基于JavaScript 实现近邻算法以及优化方案
  • 移动端适配和响应式页面中的常用单位
  • 麒麟v10系统arm64架构openssh9.7p1的rpm包
  • 刚刚❗️德勤2025校招暑期实习测评笔试SHL测评题库已发(答案)