当前位置: 首页 > 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…...

新概念英语第一册083_Going on holiday

Lesson 83: Going on holiday Watch the story and answer the question Where did Sam go for his holiday this year? He stayed at home.Key words and expressions mess n. 杂乱&#xff0c;pack v. 包装&#xff0c;打包&#xff0c;装箱suitcase …...

3个步骤让Sketch设计效率提升300%:Automate Sketch插件完全指南

3个步骤让Sketch设计效率提升300%&#xff1a;Automate Sketch插件完全指南 【免费下载链接】Automate-Sketch Make your workflow more efficient. 项目地址: https://gitcode.com/gh_mirrors/au/Automate-Sketch 在当今快节奏的设计工作中&#xff0c;效率就是竞争力。…...

DS1624温度传感器与EEPROM集成驱动设计

1. DS1624 数字温度计与非易失存储器驱动深度解析 DS1624 是 Maxim Integrated&#xff08;现为 Analog Devices&#xff09;推出的一款高度集成的数字温度传感器与串行 EEPROM 组合芯片。其核心价值在于将高精度温度测量&#xff08;0.5C 典型精度&#xff0c;-55C 至 125C 全…...

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

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

OpenCV图像处理:如何用Python实现自适应白平衡(附完整代码)

OpenCV图像处理实战&#xff1a;Python自适应白平衡算法深度解析 当你拍摄的照片总是偏蓝或偏黄时&#xff0c;可能不是相机出了问题&#xff0c;而是白平衡需要调整。作为计算机视觉开发者&#xff0c;掌握自适应白平衡算法能让你轻松解决这类色彩失真问题。本文将带你从原理到…...

3D Face HRN生产环境部署:支持Nginx反向代理+HTTPS外网安全访问

3D Face HRN生产环境部署&#xff1a;支持Nginx反向代理HTTPS外网安全访问 你想把那个酷炫的3D人脸重建模型放到公网上&#xff0c;让团队成员或客户也能用上吗&#xff1f;直接暴露Gradio的端口&#xff0c;不仅不安全&#xff0c;还可能因为网络问题访问不了。 今天&#x…...

如何永久保存QQ空间回忆?GetQzonehistory备份指南

如何永久保存QQ空间回忆&#xff1f;GetQzonehistory备份指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 您是否担心多年的QQ空间说说会随着账号变动而消失&#xff1f;GetQzonehis…...

Audio Flamingo 3:打破模态壁垒的音频智能突破性技术解析

Audio Flamingo 3&#xff1a;打破模态壁垒的音频智能突破性技术解析 【免费下载链接】audio-flamingo-3 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/audio-flamingo-3 在音频AI领域面临"模态孤岛"困境与长音频理解需求激增的双重挑战下&#xff0…...

STM32新手必看:如何用I2C驱动128x64 OLED屏幕(附完整代码)

STM32新手必看&#xff1a;如何用I2C驱动128x64 OLED屏幕&#xff08;附完整代码&#xff09; 在嵌入式开发中&#xff0c;OLED屏幕因其高对比度、低功耗和快速响应等优势&#xff0c;成为许多项目的首选显示方案。对于STM32初学者来说&#xff0c;掌握I2C接口驱动OLED屏幕是一…...

vLLM-v0.17.1效果展示:vLLM支持MoE模型(Mixtral-8x7B)推理实测

vLLM-v0.17.1效果展示&#xff1a;vLLM支持MoE模型&#xff08;Mixtral-8x7B&#xff09;推理实测 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库&#xff0c;以其出色的速度和易用性著称。这个项目最初由加州大学伯克利分校的天空计算实验室开发…...