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

C 语言数组详解

一、数组的基本概念

在 C 语言中,数组是一种相同数据类型元素的集合,这些元素在内存中连续存储。通过数组,我们可以用一个统一的名字来管理一组相关的数据,并且通过下标(索引)快速访问其中的每一个元素。例如,在统计一个班级 50 名学生的数学成绩时,使用数组可以将这 50 个成绩存储在一起,方便进行成绩的统计、排序等操作。

1.1 数组的特点

  1. 同质性:数组中所有元素的数据类型必须相同,例如int类型数组只能存储整数,float类型数组只能存储浮点数。
  1. 连续性:数组元素在内存中占据连续的存储单元,这使得数组在访问元素时效率很高,通过简单的地址计算就能快速定位到指定元素。
  1. 固定长度:在 C 语言中,数组的长度在声明时就已经确定,并且在程序运行过程中通常不能改变(不考虑动态内存分配的情况)。

1.2 数组的用途

数组在实际编程中应用广泛,常见的用途包括:

  • 数据存储:用于存储一系列相关的数据,如学生成绩、员工信息等。
  • 算法实现:许多算法(如排序算法、查找算法)都依赖数组作为基础数据结构来实现。
  • 函数参数传递:数组可以作为函数参数传递,方便在函数之间共享数据。

二、数组的声明与初始化

2.1 数组的声明

在 C 语言中,声明数组的基本语法格式为:

数据类型 数组名[数组长度];

例如,声明一个包含 10 个整数的数组arr,可以使用以下语句:

int arr[10];

这里,int表示数组元素的数据类型为整数,arr是数组名,[10]表示数组的长度为 10,即该数组可以存储 10 个整数。

需要注意的是,数组长度必须是常量表达式,即其值在编译时就可以确定。例如,下面的声明是合法的:

const int size = 5;int num[size];而下面的声明是非法的:int n = 5;int arr[n]; // 错误,n不是常量表达式

2.2 数组的初始化

数组在使用之前通常需要进行初始化,将初始值赋给数组元素。数组的初始化有以下几种方式:

2.2.1 完全初始化

在声明数组时,为每个元素都指定初始值,语法格式为:

数据类型 数组名[数组长度] = {初始值1, 初始值2, …, 初始值n};

例如,初始化一个包含 5 个整数的数组:

int arr[5] = {1, 2, 3, 4, 5};

在这种初始化方式下,数组元素arr[0]的值为 1,arr[1]的值为 2,以此类推。

2.2.2 部分初始化

如果只给数组的部分元素指定初始值,那么剩余元素将被自动初始化为 0(对于数值型数组)或空字符'\0'(对于字符型数组)。例如:

int arr[5] = {1, 2};

此时,arr[0]的值为 1,arr[1]的值为 2,arr[2]、arr[3]和arr[4]的值都为 0。

2.2.3 省略数组长度初始化

在初始化数组时,可以省略数组的长度,编译器会根据初始化列表中元素的个数自动确定数组的长度。例如:

int arr[] = {1, 2, 3, 4, 5};

这里,编译器会自动将数组arr的长度确定为 5。

三、数组元素的访问与操作

3.1 访问数组元素

在 C 语言中,通过下标(索引)来访问数组元素。数组的下标从 0 开始,到数组长度 - 1结束。访问数组元素的语法格式为:

数组名[下标];

例如,对于前面声明的数组arr:

int arr[5] = {1, 2, 3, 4, 5};

printf("%d\n", arr[2]); // 输出3

在访问数组元素时,需要注意不要越界。例如,对于长度为 5 的数组arr,如果访问arr[5],就会导致数组越界,这可能会引发程序崩溃或产生不可预料的结果。

3.2 遍历数组

遍历数组是指依次访问数组中的每一个元素。通常使用循环语句(如for循环、while循环)来实现数组的遍历。例如,使用for循环遍历数组arr并输出每个元素:

int arr[5] = {1, 2, 3, 4, 5};for (int i = 0; i < 5; i++) {printf("%d ", arr[i]);}

上述代码中,循环变量i从 0 开始,每次递增 1,直到i等于数组长度 5 时结束循环。在每次循环中,通过arr[i]访问数组的第i个元素并输出。

3.3 数组的常见操作

3.3.1 数组元素的赋值

可以通过给数组元素赋值的方式修改数组中的数据。例如:

int arr[5] = {1, 2, 3, 4, 5};

arr[3] = 10; // 将arr[3]的值修改为10

3.3.2 数组的求和

计算数组元素的和是常见的操作之一。以下是一个计算整数数组元素和的示例:

int arr[5] = {1, 2, 3, 4, 5};int sum = 0;for (int i = 0; i < 5; i++) {sum += arr[i];}printf("数组元素的和为:%d\n", sum);
3.3.3 数组的排序

数组排序是将数组中的元素按照一定的顺序(如升序或降序)重新排列。常见的排序算法有冒泡排序、选择排序、插入排序等。以冒泡排序为例,对数组进行升序排序的代码如下:

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]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}int main() {int arr[5] = {5, 4, 3, 2, 1};bubbleSort(arr, 5);for (int i = 0; i < 5; i++) {printf("%d ", arr[i]);}return 0;}

四、多维数组

4.1 二维数组的声明与初始化

二维数组可以看作是数组的数组,常用于表示具有行列结构的数据,如矩阵、表格等。二维数组的声明语法格式为:

数据类型 数组名[行数][列数];

例如,声明一个 3 行 4 列的二维整数数组matrix:

int matrix[3][4];

二维数组的初始化方式有多种,以下是几种常见的初始化方式:

  • 按行初始化
int matrix[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};部分初始化:
int matrix[3][4] = {{1, 2},{5}};在这种初始化方式下,未指定初始值的元素将被初始化为 0。省略行数初始化:
int matrix[][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};

编译器会根据初始化列表中元素的个数自动确定行数。

4.2 二维数组元素的访问与操作

访问二维数组元素的语法格式为:

数组名[行下标][列下标];

例如,对于上述二维数组matrix,访问第 1 行第 2 列的元素(注意下标从 0 开始):

printf("%d\n", matrix[0][1]); // 输出2

二维数组的遍历通常使用嵌套循环来实现。例如,遍历二维数组matrix并输出所有元素:

for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {printf("%d ", matrix[i][j]);}printf("\n");}

4.3 多维数组的扩展

除了二维数组,C 语言还支持三维数组、四维数组等多维数组。多维数组的声明、初始化和访问方式与二维数组类似,只是维度更多。例如,声明一个三维整数数组arr3D:

int arr3D[2][3][4];

多维数组在处理复杂数据结构(如三维图形数据、多层数据表格等)时非常有用。

五、数组与指针

5.1 数组名与指针

在 C 语言中,数组名代表数组的首地址,即数组第一个元素的地址。例如,对于数组int arr[5];,arr就等价于&arr[0]。我们可以使用指针来访问数组元素,例如:

int arr[5] = {1, 2, 3, 4, 5};int *ptr = arr; // 将指针ptr指向数组arr的首地址printf("%d\n", *ptr); // 输出1,等价于printf("%d\n", arr[0]);

通过指针的算术运算,可以访问数组中的其他元素。例如,*(ptr + 1)等价于arr[1],*(ptr + 2)等价于arr[2],以此类推。

5.2 指针与多维数组

对于二维数组,其数组名也是一个指针,但它是指向一维数组的指针。例如,对于二维数组int matrix[3][4];,matrix是一个指向包含 4 个整数的一维数组的指针。可以通过指针的方式访问二维数组元素:

int matrix[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};int (*ptr)[4] = matrix; // ptr是指向包含4个整数的一维数组的指针printf("%d\n", (*ptr)[1]); // 输出2,等价于printf("%d\n", matrix[0][1]);

5.3 数组作为函数参数

在 C 语言中,数组可以作为函数参数传递。当数组作为函数参数时,实际上传递的是数组的首地址,而不是整个数组的副本。函数原型的声明方式有以下几种:

// 方式一void func(int arr[], int n);// 方式二void func(int *arr, int n);// 方式三void func(int arr[10], int n); // 方括号中的数字可以省略以下是一个使用数组作为函数参数计算数组元素和的示例:int sumArray(int arr[], int n) {int sum = 0;for (int i = 0; i < n; i++) {sum += arr[i];}return sum;}int main() {int arr[5] = {1, 2, 3, 4, 5};int result = sumArray(arr, 5);printf("数组元素的和为:%d\n", result);return 0;}

六、动态数组

在前面的介绍中,数组的长度在声明时就已经确定,并且在程序运行过程中不能改变。然而,在实际编程中,有时需要根据程序运行时的具体情况动态地分配数组的长度,这时就需要使用动态内存分配。

6.1 使用malloc函数分配动态数组

malloc函数是 C 语言中用于动态分配内存的函数,其函数原型为:

void* malloc(size_t size);

该函数接受一个参数size,表示要分配的内存字节数,返回一个指向分配内存的指针。如果分配失败,返回NULL。

例如,动态分配一个包含 10 个整数的数组:

int *arr = (int *)malloc(10 * sizeof(int));if (arr == NULL) {printf("内存分配失败!\n");return 1;}for (int i = 0; i < 10; i++) {arr[i] = i + 1;}在使用完动态分配的数组后,需要使用free函数释放内存,以避免内存泄漏:free(arr);arr = NULL; // 为了防止悬空指针,将指针赋值为NULL

6.2 使用realloc函数调整动态数组大小

realloc函数可以用于调整已分配内存块的大小,其函数原型为:

void* realloc(void* ptr, size_t size);

其中,ptr是指向已分配内存块的指针,size是新的内存块大小。如果ptr为NULL,则realloc函数的行为与malloc函数相同;如果size为 0,则释放ptr指向的内存块。

例如,将前面分配的包含 10 个整数的数组大小调整为 20:

arr = (int *)realloc(arr, 20 * sizeof(int));if (arr == NULL) {printf("内存重新分配失败!\n");return 1;}

七、数组使用的注意事项

  1. 数组越界:在访问数组元素时,一定要确保下标在合法范围内,避免数组越界。数组越界可能会导致程序崩溃或修改其他变量的值,产生难以调试的错误。
  1. 初始化问题:如果数组没有进行初始化,其元素的值是不确定的,在使用之前最好进行初始化操作。
  1. 动态内存管理:在使用动态数组时,要注意及时释放内存,避免内存泄漏。同时,在释放内存后,将指针赋值为NULL,防止悬空指针。
  1. 数组作为函数参数:当数组作为函数参数传递时,传递的是数组的首地址,函数内部对数组的修改会影响到原数组。在需要保护原数组不被修改的情况下,可以考虑传递数组的副本。

以上从多个维度对 C 语言数组进行了详细阐述。若你对数组的某个部分还有疑问,或想了解更多相关应用场景,可以评论留言私信。

相关文章:

C 语言数组详解

一、数组的基本概念 在 C 语言中&#xff0c;数组是一种相同数据类型元素的集合&#xff0c;这些元素在内存中连续存储。通过数组&#xff0c;我们可以用一个统一的名字来管理一组相关的数据&#xff0c;并且通过下标&#xff08;索引&#xff09;快速访问其中的每一个元素。例…...

ADVB协议同步

关于视频传输&#xff0c;有多种控制时序。协议标准允许设计者选择有限的几个速率的接口来满足 系统设计目标。例如&#xff0c;一些系统使用总线时序发送信息通过line-by-line;在这个案例中&#xff0c; 容器的sof作为vsync同步的点。horizontal line blanding将插入idles,ADV…...

基于LAB颜色空间的增强型颜色迁移算法

本文算法使用Grok完成所有内容&#xff0c;包含算法改进和代码编写&#xff0c;可大大提升代码编写速度&#xff0c;算法改进速度&#xff0c;提供相关idea&#xff0c;提升效率&#xff1b; 概述 本文档描述了一种基于LAB颜色空间的颜色迁移算法&#xff0c;用于将缩略图D的…...

复合材料高置信度 DIC 测量与高级实验技术研讨会邀请函

邀请函 2025年5月8日 上海 中国复合材料学会官网会议通知 您可以点击上方蓝字跳转官网查看官网信息 主办单位&#xff1a; 中国复合材料学会 协办单位&#xff1a; 研索仪器科技&#xff08;上海&#xff09;有限公司 数字图像相关技术&#xff08;Digital Image Correla…...

解决docker部署MySQL的max_allowed_packet 限制问题

报错 Error querying database. Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (2,471 > 2,048). You can change this value on the server by setting the max_allowed_packet variable. ### The error may exist in file …...

【XR手柄交互】Unity 中使用 InputActions 实现手柄控制详解(基于 OpenXR + Unity新输入系统(Input Actions))

摘要&#xff1a; 本文主要介绍如何使用 Input Actions&#xff08;Unity 新输入系统&#xff09; OpenXR 来实现 VR手柄控制&#xff08;监听ABXY按钮、摇杆、抓握等操作&#xff09;。 &#x1f3ae; Unity 中使用 InputActions 实现手柄控制详解&#xff08;基于 OpenXR 新…...

C++:继承机制详解

目录 一.继承的概念及定义 一&#xff09;.继承的概念 二&#xff09;.继承定义 1.定义格式 2.继承类型 3.继承类模板 二.基类和派生类间的转换 三.继承中的作用域 四.派生类的默认成员函数 一&#xff09;.4个常见默认成员函数 二&#xff09;.不可被继承的类 五…...

自然语言处理+知识图谱:智能导诊的“大脑”是如何工作的?

智能导诊系统定义与作用 智能导诊系统是一种基于人工智能技术的医疗辅助工具&#xff0c;旨在提高医疗服务效率、改善患者就医体验、降低医院运营成本&#xff0c;通过自然语言处理技术&#xff0c;智能导诊系统能够自动回答患者的常见问题&#xff0c;帮助患者快速了解自己的…...

论文阅读笔记——ZeroGrasp: Zero-Shot Shape Reconstruction Enabled Robotic Grasping

ZeroGrasp 论文 多视角重建计算大、配置复杂&#xff0c;本文将稀疏体素重建&#xff08;快且效果好&#xff09;引入机器人抓取且只考虑单目重建&#xff0c;通过利用基于物理的接触约束与碰撞检测&#xff08;这对精确抓取至关重要&#xff09;&#xff0c;提升三维重建质量将…...

Qt 调试信息重定向到本地文件

1、在Qt软件开发过程中&#xff0c;我们经常使用qDebug()输出一些调试信息在QtCreator终端上。 但若将软件编译、生成、打包为一个完整的可运行的程序并安装在系统中后&#xff0c;系统中没有QtCreator和编译环境&#xff0c;那应用程序出现问题&#xff0c;如何输出信息排查…...

Android Studio开发中Application和Activity生命周期详解

文章目录 Application生命周期Application生命周期概述Application关键回调方法onCreate()onConfigurationChanged()onLowMemory()onTrimMemory()onTerminate() Application生命周期管理最佳实践 Activity生命周期Activity生命周期概述Activity生命周期回调方法onCreate()onSta…...

vite+vue2+elementui构建之 package.json

webpack版本太低&#xff0c;构建依赖太多&#xff0c;头大。 各种查阅资料&#xff0c;弄了一份直通构建vite构建elementUi核心文件&#xff0c; 构建基于开源若依vue2vue3版本改造&#xff0c;感谢开源&#xff0c;感谢若依。 vitevue2elementui构建之 vite.config.js-CSD…...

安全编排自动化与响应(SOAR):从事件响应到智能编排的技术实践

安全编排自动化与响应&#xff08;SOAR&#xff09;&#xff1a;从事件响应到智能编排的技术实践 在网络安全威胁复杂度指数级增长的今天&#xff0c;人工处理安全事件的效率已难以应对高频攻击&#xff08;如日均万级的恶意IP扫描&#xff09;。安全编排自动化与响应&#xf…...

《Keras 3 :使用 TFServing 提供 TensorFlow 模型》

《Keras 3 :使用 TFServing 提供 TensorFlow 模型》 作者:Dimitre Oliveira 创建日期:2023/01/02 最后修改时间:2023/01/02 描述:如何使用 TensorFlow Serving 为 TensorFlow 模型提供服务。 (i) 此示例使用 Keras 3 在 Colab 中查看 GitHub 源 介绍 构建机器学习模…...

深入理解C++ 中的list容器

目录 一、引言 二、list的基本介绍 2.1 底层结构 2.2 特性 三、list的使用 3.1 构造函数 3.2 迭代器的使用 3.3 容量相关操作 3.4 元素访问相关操作 3.5 修改器操作 3.6 迭代器失效问题 四、list的模拟实现 4.1 节点定义 4.2 迭代器实现 4.3 list类实现 五、lis…...

附赠二张图,阐述我对大模型的生态发展、技术架构认识。

文章精炼&#xff0c;用两张图说明大模型发展业态方向&#xff0c;以及大模型主体技术架构。&#xff08;目前还需要进一步验证我的Thought && ideas&#xff0c;等待机会吧.........&#xff09; 图一&#xff1a;探究大模型三个层次应用方向&#xff0c;浅层次入门简…...

Java实现加密(七)国密SM2算法的签名和验签(附商用密码检测相关国家标准/国密标准下载)

目录 一、国密标准中&#xff0c;关于SM2签名验签的定义二、SM2签名和验签的实现原理1. 前置知识2. 签名生成过程3. 验签过程4. 数学正确性证明5. 安全性与注意事项 三、带userId、不带userId的区别1. 核心区别2.算法区别(1) 哈希计算过程(2) 签名验签流程 四、Java代码实现1. …...

贪心算法~~

目录 一、理论基础 二、题目练习 &#xff08;1&#xff09;455. 分发饼干 &#xff08;2&#xff09;53. 最大子数组和 - 力扣 &#xff08;3&#xff09;122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; &#xff08;4&#xff09;860. 柠檬水找零…...

XYNU2024信安杯-REVERSE(复现)

前言 记录记录 1.Can_you_find_me? 签到题&#xff0c;秒了 2.ea_re 快速定位 int __cdecl main_0(int argc, const char **argv, const char **envp) {int v4; // [esp0h] [ebp-1A0h]const char **v5; // [esp4h] [ebp-19Ch]const char **v6; // [esp8h] [ebp-198h]char v7;…...

NLP系列【自然语言处理的深度学习模型综述】

自然语言处理的深度学习模型 摘要传统自然语言处理模型&#xff08;略 不作重点&#xff09;神经网络自然语言处理模型经典神经网络CNN网络模型Word2Vec模型RNN模型GPT网络模型BERT网络模型 BERT变体模型提升模型性能模型压缩 摘要 在自然语言处理任务方面&#xff0c;依据语料…...

【差分隐私】basic primitive的含义

在差分隐私领域&#xff0c;“basic primitive”一词具有特定的技术含义&#xff0c;需从单词本义及学科背景两个层面解析&#xff1a; 一、单词本义解析 “Primitive”在计算机科学中通常指代基础构建单元或核心组件&#xff0c;例如编程语言中的基本数据类型&#xff08;如整…...

数字浪潮下的算力担当:GPU 服务器的多元应用、核心价值

在当今数据洪流和信息爆炸的时代&#xff0c;算力已成为衡量国家、行业乃至企业发展水平的关键指标。而算力服务器&#xff0c;特别是 GPU 服务器&#xff0c;作为算力的核心载体&#xff0c;正以其卓越性能深刻改变着世界的运行逻辑与模式。从数据处理到云计算&#xff0c;从人…...

【Echarts】使用echarts绘制多个不同类型的中国地图

一、需求 在同一页面上绘制多个不同类型的中国地图&#xff0c;如果是在同一页面上绘制多个同一种类型的地图可以直接引用一个china.js文件&#xff0c;设置两个独立的div分别用于放置两个地图&#xff0c;并实例化配置相关参数即可&#xff0c;但是如果在同一个页面上绘制多个…...

WEB漏洞-XSS跨站原理分类

本文主要内容 原理 XSS漏洞产生原理&#xff1f; XSS漏洞危害影响&#xff1f; 分类 反射型、存储型、DOM型 手法 XSS平台使用 XSS工具使用 XSS结合其他漏洞 靶场搭建 pikachu 靶场搭建&#xff08;完整版&#xff09;-CSDN博客https://blog.csdn.net…...

PR第二课--混剪

1.音乐打点 1.1 手动打点 按钮(如图),或者,快捷键M(如果在已有打点处,再次按M键会进入对标记点的设置界面,如下下图) 1.2 插件打点 一段音乐中,有明显的鼓点时,可以使用打点插件,快捷打点;如果鼓点不明显的话,最好还是手动打点,用插件打点会打出大量的标记点,…...

Kafka和flume整合

需求1&#xff1a;利用flume监控某目录中新生成的文件&#xff0c;将监控到的变更数据发送给kafka&#xff0c;kafka将收到的数据打印到控制台&#xff1a; 在flume/conf下添加.conf文件&#xff0c; vi flume-kafka.conf # 定义 Agent 组件 a1.sourcesr1 a1.sinksk1 a1.c…...

Linux 内核网络协议栈中 inet_stream_ops 与 tcp_prot 的深度解析

在 Linux 内核网络协议栈中,TCP 协议的实现依赖于多个关键结构体的协作。其中,inet_stream_ops 和 tcp_prot 是两个核心结构体,它们分别属于不同的层次,共同完成从用户态系统调用到底层协议处理的完整链路。本文将从功能定位、协作关系、代码示例及设计哲学等方面,深入分析…...

flume整合kafka

需求一&#xff1a; 启动flume 启动kafka消费者&#xff0c;验证数据写入成功 新增测试数据 需求二&#xff1a; 启动Kafka生产者 启动Flume 在生产者中写入数据...

EasyRTC音视频实时通话嵌入式SDK,打造社交娱乐低延迟实时互动的新体验

一、方案背景 在数字化时代&#xff0c;社交娱乐已经成为人们生活中不可或缺的一部分。随着移动互联网和智能设备的普及&#xff0c;用户对实时互动的需求越来越高。EasyRTC作为一款基于WebRTC技术的实时音视频通信解决方案&#xff0c;凭借其低延迟、高稳定性和跨平台兼容性&…...

制作一款打飞机游戏21:自定义工具

关于如何在Pico 8中创建我们自己的编辑器。 外部编辑器的需求 首先&#xff0c;我想谈谈为什么我们需要外部编辑器。外部编辑器通常用于编辑游戏中的数据。例如&#xff0c;一个游戏卡或程序通常包含一些代码&#xff0c;但也会包含数据&#xff0c;比如静态信息&#xff0c;…...

面向高性能运动控制的MCU:架构创新、算法优化与应用分析

摘要&#xff1a;现代工业自动化、汽车电子以及商业航天等领域对运动控制MCU的性能要求不断提升。本文以国科安芯的MCU芯片AS32A601为例&#xff0c;从架构创新、算法优化到实际应用案例&#xff0c;全方位展示其在高性能运动控制领域的优势与潜力。该MCU以32位RISC-V指令集为基…...

LWIP中两种重要的数据结构pbuf和pcb详细介绍

LWIP&#xff08;Lightweight IP&#xff09;是为嵌入式系统设计的轻量级TCP/IP协议栈。pbuf&#xff08;Packet Buffer&#xff09;和PCB&#xff08;Protocol Control Block&#xff09;是LwIP中两个核心数据结构&#xff0c;分别负责数据包管理和协议状态维护。 1. pbuf&…...

embedding_model模型通没有自带有归一化层该怎么处理?

embedding_model 是什么&#xff1a; 嵌入式模型&#xff08;Embedding&#xff09;是一种广泛应用于自然语言处理&#xff08;NLP&#xff09;和计算机视觉&#xff08;CV&#xff09;等领域的机器学习模型&#xff0c;它可以将高维度的数据转化为低维度的嵌入空间&#xff0…...

【蓝桥杯选拔赛真题104】Scratch回文数 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 scratch回文数 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 四、程序编写 五、考点分析 六、推荐资料 1、scratch资料 2、python资料 3、C++资料 scratch回文数 第十五届青少年蓝桥杯scratch编…...

1.2-1.3考研408计算机组成原理第一章 计算机系统概述

计算机组成原理第一章 计算机系统概述 一、计算机的层次结构 1.1 计算机系统组成 计算机系统由硬件系统和软件系统两大部分构成&#xff1a; 硬件系统&#xff1a;包括运算器、控制器、存储器、输入设备和输出设备五大核心部件&#xff08;冯诺依曼体系结构&#xff09;。软…...

【QQmusic自定义控件实现音乐播放器核心交互逻辑】第三章

&#x1f339; 作者: 云小逸 &#x1f91f; 个人主页: 云小逸的主页 &#x1f91f; motto: 要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前&#xff0c;其次就是现在&…...

基于图扑 HT 实现的智慧展馆数字孪生应用

在当今数字化时代&#xff0c;智慧展览馆作为传统展览场所的创新升级形态&#xff0c;借助前沿科技与现代化管理理念&#xff0c;实现了全方位的数字化、智能化转型。图扑软件凭借其自主研发的 HT 技术在智慧展馆领域取得了卓越成果&#xff0c;为城市基础设施数字化应用带来了…...

从线性到非线性:简单聊聊神经网络的常见三大激活函数

大家好&#xff0c;我是沛哥儿&#xff0c;我们今天一起来学习下神经网络的三个常用的激活函数。 引言&#xff1a;什么是激活函数 激活函数是神经网络中非常重要的组成部分&#xff0c;它引入了非线性因素&#xff0c;使得神经网络能够学习和表示复杂的函数关系。 在神经网络…...

重生之--js原生甘特图实现

需求&#xff1a; 一个树形结构&#xff0c;根据子节点的时间范围显示显示进度 &#xff0c;不同的时间范围对应不同的颜色 数据类型大概是这个样子的 甘特图 dom部分 首先要计算所有节点的 最大时间和最小时间 然后再计算每个甘特图的宽度 再计算他的偏移量 再计算颜色...

pnpm monoreop 打包时 node_modules 内部包 typescript 不能推导出类型报错

报错信息如下&#xff1a; ../../packages/antdv/components/pro-table/src/form-render.vue:405:1 - error TS2742: The inferred type of default cannot be named without a reference to .pnpm/scroll-into-view-if-needed2.2.31/node_modules/scroll-into-view-if-needed…...

告别默认配置!Xray自定义POC开发指南

文章涉及操作均为测试环境,未授权时切勿对真实业务系统进行测试! 下载与解压 官网地址: Xray GitHub Releases 根据系统选择对应版本: Windows:xray_windows_amd64.exe.zipLinux:xray_linux_amd64.zipmacOS:xray_darwin_amd64.zip解压后得到可执行文件(如 xray_linux_…...

websheet之 自定义函数

在线代码 {.is-success} 一、自定义函数约定 必须遵守本控件的自定函数约定才可以正常使用。 {.is-warning} 约定如下&#xff1a; 自定义类名称与函数名称一致。&#xff08;强制&#xff09;该类方法名称与函数名称一致&#xff0c;该方法是函数的入口。&#xff08;强制&am…...

Jenkins Pipeline 构建 CI/CD 流程

文章目录 jenkins 安装jenkins 配置jenkins 快速上手在 jenkins 中创建一个新的 Pipeline 作业配置Pipeline运行 Pipeline 作业 Pipeline概述Declarative PipelineScripted Pipeline jenkins 安装 安装环境&#xff1a; Linux CentOS 10&#xff1a;Linux CentOS9安装配置Jav…...

电脑技巧:路由器内部元器件介绍

目录 1. 处理器(CPU) 2. 内存(RAM) 3. 固态存储(Flash Memory) 4. 网络接口卡(NIC) 5. 电源模块 6. 散热系统 7. 无线天线 结语 路由器是我们日常上网的重要设备,今天我们就来深入了解路由器内部的各个元器件,了解它们是如何协同工作,一起来看看吧。 1. 处理器(CPU…...

ArrayUtils:数组操作的“变形金刚“——让你的数组七十二变

各位数组操控师们好&#xff01;今天给大家带来的是Apache Commons Lang3中的ArrayUtils工具类。这个工具就像数组界的"孙悟空"&#xff0c;能让你的数组随心所欲地变大、变小、变长、变短&#xff0c;再也不用对着原生数组的"死板"叹气了&#xff01; 一…...

电脑温度怎么看 查看CPU温度的方法

监测电脑温度对于保持硬件健康非常重要&#xff0c;特别是在进行高强度运算、游戏或超频等操作时。过高的温度可能导致硬件性能下降&#xff0c;甚至损坏。本篇文章将介绍查看电脑温度的4种方法。 一、使用Windows内置工具查看CPU温度 Windows系统本身并不直接提供查看CPU温度…...

【合新通信】---浸没式液冷光模块化学兼容性测试方法

一、测试目的与核心挑战 测试目标 验证冷媒&#xff08;氟化液、矿物油等&#xff09;与光模块材料的化学稳定性&#xff0c;确保长期浸没环境下无腐蚀、溶胀或性能衰减。关键风险点&#xff1a;密封材料&#xff08;如硅胶、环氧树脂&#xff09;的溶解或老化&#xff1b;金…...

shell 循环

shell 循环while语句,shell循环until语句在上一篇shell流程控制 1.shell循环until语句 until 条件 #当后面的条件表达式为假的时候的才循环,为真的时候就停止了 do 循环体 done [root@linux-server script]# cat until.sh (1) #!/bin/bash x=1 until [ $x -ge 10 ] 大于…...

【产品经理】常见的交互说明撰写方法

在产品原型设计中&#xff0c;交互说明是确保开发团队准确理解设计意图的关键文档。以下是常见的交互说明撰写方法及其应用场景&#xff0c;帮助您系统化地传达交互逻辑&#xff1a; 文字描述法 方法&#xff1a;用自然语言详细描述操作流程、反馈及规则。 适用场景&#xff…...

使用kubeadmin 部署k8s集群

成功搭建一个 Kubernetes 1.28.2 集群,包含以下组件和状态: 集群拓扑 1 个 Master 节点 IP:10.1.1.100 角色:control-plane 2 个 Worker 节点 Node2:10.1.1.101 Node3:10.1.1.102 核心组件状态 所有节点通过 kubectl get nodes 显示为 Ready。 核心 Pod(如 etc…...