当前位置: 首页 > 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 作用域规则

相关文章:

「C系列」C 数组

文章目录 一、C 数组1. 声明数组2. 初始化数组3. 访问数组元素4. 数组越界5. 多维数组 二、C 操作数组的方法有哪些三、C 数组-应用场景1. 存储固定数量的数据2. 实现算法&#xff08;如排序&#xff09;3. 处理数据集合 四、相关链接 一、C 数组 在C语言中&#xff0c;数组是…...

Python框架scrapy有什么天赋异禀

Scrapy框架与一般的爬虫代码之间有几个显著的区别&#xff0c;这些差异主要体现在设计模式、代码结构、执行效率以及可扩展性等方面。下面是一些关键的不同点&#xff1a; 结构化与模块化&#xff1a; Scrapy&#xff1a;提供了高度结构化的框架&#xff0c;包括定义好的Spider…...

【ROS2大白话】四、ROS2非常简单的传参方式

系列文章目录 【ROS2大白话】一、ROS2 humble及cartorgrapher安装 【ROS2大白话】二、turtlebot3安装 【ROS2大白话】三、给turtlebot3安装realsense深度相机 【ROS2大白话】四、ROS2非常简单的传参方式 文章目录 系列文章目录前言一、launch文件传参的demo1. 编写launch.py文…...

浅谈mysql 的批量delete 和 使用in条件批量删除问题

在考虑这两个DELETE语句的性能时&#xff0c;我们需要考虑数据库如何执行这些查询以及它们背后可能涉及的索引和数据结构。 1.执行多个单独的DELETE语句&#xff1a; DELETE FROM a WHERE b 1 AND c 1; ... DELETE FROM a WHERE b 1000 AND c 1000; 这种方法的优点是每…...

【Spring Boot】过滤敏感词的两种实现

文章目录 项目场景前置知识前缀树 实现方式解决方案一&#xff1a;读取敏感词文件生成前缀树构建敏感词过滤器1. 导入敏感词文件 src/main/resources/sensitive_words.txt2. 构建敏感词过滤器 SensitiveFilter3. 测试与使用 解决方案二&#xff1a;使用第三方插件 houbb/sensit…...

在 Zustand 中管理状态能使用类(Class)吗

在 Zustand 中&#xff0c;通常不推荐使用类&#xff08;Class&#xff09;来管理状态&#xff0c;因为 Zustand 的设计理念是基于函数式编程和 React Hooks 的。然而&#xff0c;仍然可以在 Zustand 中间接地使用类&#xff0c;但这并不是 Zustand 的典型用法。 如果确实想要…...

MoreTable 方法selectWithFun,count 使用实例

ORM Bee, example for MoreTable methods:selectWithFun,count ORM Bee时, MoreTable 方法selectWithFun,count 使用实例 package org.teasoft.exam.bee.osql;import org.teasoft.bee.osql.BeeException; import org.teasoft.bee.osql.FunctionType; import org.teasoft.be…...

【SpringBoot】在Spring中使用自定义条件类在Java声明Bean时实现条件注入

在Spring框架中&#xff0c;通过实现org.springframework.context.annotation.Condition接口并重写matches()方法&#xff0c;可以根据自定义条件来控制Bean的注入。这种机制非常灵活&#xff0c;可以帮助开发人员根据环境或配置来有选择地启用或禁用某些Bean。本文将详细介绍如…...

网卡聚合链路配置

创建名为mybond0的绑定&#xff0c;使用示例如下&#xff1a; # nmcli con add type bond con-name mybond0 ifname mybond0 mode active-backup添加从属接口&#xff0c;使用示例如下&#xff1a; # nmcli con add type bond-slave ifname enp3s0 master mybond0要添加其他从…...

PlantSimulation导入cad图作为背景

PlantSimulation导入cad图作为背景 首先要整理cad文件&#xff0c;正常的工艺规划总图中存在较多杂乱文件&#xff0c;这些信息是不需要的&#xff0c;如果直接导入&#xff0c;会非常卡。 1、打开cad软件&#xff0c;使用layon命令打开所有的隐藏图层&#xff0c;删除不需要…...

【大模型】个人对大模型选择的见解

选择大模型产品时&#xff0c;需要考虑多个因素&#xff0c;包括但不限于以下几点&#xff1a; 需求匹配度&#xff1a;首先&#xff0c;要明确你的需求是什么。不同的大模型产品可能在功能、性能、应用场景等方面有所侧重。例如&#xff0c;有的模型擅长自然语言处理&#xff…...

java的反射和python的鸭子类型

Java的反射&#xff08;Reflection&#xff09;和Python的鸭子类型&#xff08;Duck Typing&#xff09;感觉相似但又说不出具体的细节&#xff0c;本文借助kimi试图给出总结。 相似之处&#xff1a; 动态性&#xff1a;Java的反射允许程序在运行时查询、创建和修改类和对象的…...

爬虫工具yt-dlp

yt-dlp是youtube-dlp的一个fork&#xff0c;youtube-dlp曾经也较为活跃&#xff0c;但后来被众多网站屏蔽&#xff0c;于是大家转而在其基础上开发yt-dlp。yt-dlp的github项目地址为&#xff1a;GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloaderA …...

【代码随想录训练营】【Day 50】【动态规划-9】| Leetcode 198, 213, 337

【代码随想录训练营】【Day 50】【动态规划-9】【需二刷】| Leetcode 198, 213, 337 需强化知识点 需二刷&#xff0c;打家劫舍系列 题目 198. 打家劫舍 class Solution:def rob(self, nums: List[int]) -> int:if len(nums) 1:return nums[0]dp [0] * (len(nums))dp…...

源码讲解kafka 如何使用零拷贝技术(zero-copy)

前言 kafka 作为一个高吞吐量的分布式消息系统,广泛应用与实时应用场景中。为了实现高效的数据传输,kafka使用了零拷贝技术(zero-copy)显著提高了性能。本文将详细讲解 Kafka 如何利用零拷贝技术优化数据传输。 什么是零拷贝 零拷贝技术目的是减少数据传输的效率。在传统…...

Ubuntu20.04配置qwen0.5B记录

环境简介 Ubuntu20.04、 NVIDIA-SMI 545.29.06、 Cuda 11.4、 python3.10、 pytorch1.11.0 开始搭建 python环境设置 创建虚拟环境 conda create --name qewn python3.10预安装modelscope和transformers pip install modelscope pip install transformers安装pytorch co…...

java自学阶段二:JavaWeb开发--day80(项目实战2之苍穹外卖)

《项目案例—黑马苍穹外卖》 目录&#xff1a; 学习目标项目介绍前端环境搭建(前期直接导入老师的项目&#xff0c;后期自己敲&#xff09;后端环境搭建&#xff08;导入初始项目&#xff0c;新建仓库使用git管理项目&#xff0c;新建数据库&#xff0c;修改登录功能&#xff…...

HPUX系统Oracle RAC如何添加ASM磁盘

前言 HPUX简介 HP-UX (Hewlett-Packard Unix) 是惠普公司开发的类 Unix 操作系统。自 1980 年代问世以来&#xff0c;HP-UX 在技术和功能上不断发展&#xff0c;适应了多种硬件平台和企业计算需求。以下是 HP-UX 的发展历史概述&#xff1a; 1980 年代&#xff1a;起源与早期…...

Jmeter 压力测测试的简单入门

下载安装 官方网站&#xff1a;Apache JMeter - Download Apache JMeter 下载完成解压即可。 配置 1. 找到 bin 目录下的 ApacheJMeter.jar 包&#xff0c;直接打开 如果向图片这样不能直接打开&#xff0c;就在此路径运行 CMD&#xff0c;然后输入下面的命令即可启动。 ja…...

N叉树的层序遍历-力扣

本题同样是二叉树的层序遍历的扩展&#xff0c;只不过二叉树每个节点的子节点只有左右节点&#xff0c;而N叉树的子节点是一个数组&#xff0c;层序遍历到一个节点时&#xff0c;需要将这个节点的子节点数组的每个节点都入队。 代码如下&#xff1a; /* // Definition for a N…...

MusePublic模型解释性研究:注意力可视化分析工具开发

MusePublic模型解释性研究&#xff1a;注意力可视化分析工具开发 1. 引言 当我们看到一幅由AI生成的精美画作时&#xff0c;常常会好奇&#xff1a;模型到底是根据什么来创作这幅作品的&#xff1f;哪些部分吸引了它的注意力&#xff1f;又是如何做出每一个绘画决策的&#x…...

洛阳万达商场美团快闪店设计,凭什么成为商圈流量密码?肆墨设计

在商业美陈从 “装饰载体” 向 “生活场景容器” 转型的当下&#xff0c;洛阳万达商场美团 “美事发生” 美好生活集市快闪店&#xff0c;以品牌 IP 为核心锚点&#xff0c;融合女性消费心理与地域商业特质&#xff0c;构建了一场兼具视觉冲击力、情感共鸣与商业转化的沉浸式空…...

从BEVFormer到BEVFormer-v2:透视监督如何重塑BEV感知的骨干网络

1. BEVFormer的核心思想与局限性 BEVFormer作为首个将Transformer引入鸟瞰图&#xff08;BEV&#xff09;感知的开创性工作&#xff0c;其核心创新在于摆脱了对深度估计的强依赖。传统BEV方法需要先计算每个像素的深度&#xff0c;再将2D特征"抬升"到3D空间&#xff…...

深入解析Docker Bridge网络模式:从docker0到容器互联实战

1. Docker Bridge网络模式初探 刚接触Docker时&#xff0c;我发现每次启动容器都会自动分配一个IP地址&#xff0c;这些容器之间居然能直接互相访问。这背后的魔法就是Bridge网络模式——Docker的默认网络方案。想象一下docker0就像公司内部的交换机&#xff0c;所有工位&#…...

收藏!小白程序员必看:11个高级RAG策略彻底解决系统效果不佳问题

本文深入探讨了朴素RAG系统效果不佳的原因&#xff0c;并提出了11种先进的RAG策略&#xff0c;包括上下文感知分块、上下文检索、重排序等&#xff0c;详细阐述了如何通过组合这些策略来提升系统准确率。文章还提供了实际应用案例和实施路线图&#xff0c;帮助读者理解和应用这…...

别再手动抄表了!用Python+Snap7实时采集S7-1200数据到Excel(附完整代码)

工业自动化数据采集实战&#xff1a;PythonSnap7实现S7-1200实时数据归档系统 在智能制造和工业4.0的浪潮中&#xff0c;生产设备的实时数据采集已成为工厂数字化升级的基础环节。传统的手动抄表方式不仅效率低下&#xff0c;还容易引入人为误差。本文将展示如何构建一个基于P…...

基于Pytorch的EcapaTdnn声纹识别实战:从数据预处理到模型部署

1. 声纹识别与EcapaTdnn模型基础 声纹识别&#xff08;Voiceprint Recognition&#xff09;是生物识别技术的一种&#xff0c;通过分析语音信号中的个性化特征来确认说话人身份。想象一下&#xff0c;就像每个人的指纹独一无二&#xff0c;我们的声带、口腔结构和发音习惯也会在…...

如何快速掌握M3U8下载:N_m3u8DL-CLI-SimpleG新手完整教程

如何快速掌握M3U8下载&#xff1a;N_m3u8DL-CLI-SimpleG新手完整教程 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 想要轻松下载在线视频吗&#xff1f;N_m3u8DL-CLI-SimpleG是…...

基于MATLAB的交通标志识别

基于MATLAB的交通标志识别开车上路最怕错过限速标志&#xff0c;今天咱们聊聊用MATLAB做个能自动识别交通标志的玩意儿。先别急着找深度学习框架&#xff0c;咱们从基础的图像处理套路入手&#xff0c;保准你能看懂还能玩起来。先整点颜色分割试试水。交通标志最明显的特征就是…...

EasyAnimateV5图生视频模型:VMware环境搭建与中文提示词实战

EasyAnimateV5图生视频模型&#xff1a;VMware环境搭建与中文提示词实战 1. 为什么选择EasyAnimateV5进行图生视频创作 在当今内容创作领域&#xff0c;视频内容的需求呈现爆发式增长。EasyAnimateV5-7b-zh-InP作为一款专注于图生视频任务的AI模型&#xff0c;为创作者提供了…...