【Rust自学】3.3. 数据类型:复合类型
3.3 数据类型复合类型3.3.0. 写在正文之前欢迎来到Rust自学的第三章一共有6个小节分别是:- 变量与可变性- 数据类型标量类型-数据类型复合类型本文- 函数和注释- 控制流if else- 控制流循环通过第二章的小游戏(没看的初学者强烈建议看一下)相信你已经学会了基本的Rust语法而在第三章我们将更深一层了解Rust中的通用的编程概念。3.3.1. 复合类型的简介复合类型可以将多个值组合成一个类型。Rust提供了两种基础的复合类型元组和数组。3.3.1. 元组Tuple元组的特点- 元组可以将多个不同类型的值组合成一个类型。- 元组的长度是固定的一旦声明就无法改变。创建元组- 在小括号里将值用逗号分开。- 元组中的每个位置都对应一个类型元组中各元素的类型不必相同。fn main(){ let tup: (u32, f32, i64) (6657, 0.0721, 114514); println!({},{},{}, tup.0, tup.1, tup.2); // Output: 6657,0.0721,114514 }获取元组元素值- 可以使用模式匹配来解构destructure一个元组从而获取元素值。fn main(){ let tup: (u32, f32, i64) (6657, 0.0721, 114514); let (x, y, z) tup; println!({},{},{}, x, y, z); // Output: 6657,0.0721,114514 }访问元组的元素- 在元组变量后使用点标记法后接元素的索引号。println!({},{},{}, tup.0, tup.1, tup.2);3.3.2. 数组数组的特点- 数组中的每个元素的类型必须相同。- 数组也可以将多个值放入一个类型。- 数组的长度是固定的。声明数组- 在中括号里各值用逗号分开。let a [1, 1, 4, 5, 1, 4];数组的用处- 如果想把数据放在栈Stack上而不是堆Heap上或者想保证有固定数量的元素这时使用数组更有好处。- 数组没有向量vector以后会讲灵活。- 向量由标准库提供而数组内置于语言中并通过prelude模块提供prelude也是标准库的一部分。- 向量的长度可以改变。- 不确定应该使用数组还是向量时大概率应该使用向量。数组的类型语法- 数组的类型以[类型; 长度]的形式表示。let machine: [u32; 4] [6, 6, 5, 7];声明数组的其他方法- 如果数组的每个元素值都相同那么可以- 在中括号里指定初始值- 然后跟着一个;- 最后加上数组的长度let a [3; 3]; let b [3, 3, 3];这个例子中a和b是等价的。访问数组的元素- 数组是栈上分配的一块连续内存。- 可以使用索引来访问数组的元素。let machine [6, 6, 5, 7]; let wjq machine[0];如果索引越界在编译器能够证明错误的情况下Rust可能在编译时发现它否则会在运行时panic因为Rust不允许程序继续读取该地址的内存数组背后是一块连续内存。假设数组的第一个元素在内存位置x那么第二个元素位于x 第一个元素的大小之后以此类推。如果索引大于数组的实际长度程序就会读取数组之外的内存而那里的内容可能是任意值。在C中完全没有边界检查。在C中普通数组也没有只有std::array有在Rust里强制进行边界检查。FeatureCCRustMemory modelContiguousContiguousContiguousSafetyNo bounds checkingstd::arrayhas bounds checking; ordinary arrays do notBounds checking is enforcedDynamic arraysManual memory management requiredstd::vectorVecMultidimensional arraysYesYesYesSpecial abilitiesSimple and efficientRich STL containersOwnership and borrow checking如果编译器能够证明索引越界就会在编译期拒绝该程序let a 5; let machine [6, 6, 5, 7]; let wjq machine[a]; // Error: this operation will panic at runtime如果索引要到运行时才能确定程序可以编译通过但越界访问会在运行时panicfn get_index() - usize { 5 // 设想这个值来自输入或其他地方 } fn main() { let machine [6, 6, 5, 7]; let wjq machine[get_index()]; }Output:thread main panicked at src/main.rs:7:15: index out of bounds: the len is 4 but the index is 5 note: run with RUST_BACKTRACE1 environment variable to display a backtrace

相关新闻

Springboot3+Vue3+MySQL 校园物品交易平台源码实战前后端分离

Springboot3+Vue3+MySQL 校园物品交易平台源码实战前后端分离

一、项目简介 本项目是一个面向大学生的校园物品交易平台,采用前后端分离架构,后端基于 Spring Boot 3.2,前端基于 Vue 3 Element Plus,数据库使用 MySQL 8.0。系统包含普通用户和管理员两个角色。普通用户可以注册登录、发布商品…

2026/10/18 10:54:35 阅读更多 →
【Rust自学】3.4. 函数和注释

【Rust自学】3.4. 函数和注释

3.4 函数和注释 3.4.0. 写在正文之前 欢迎来到Rust自学的第三章,一共有6个小节,分别是: - 变量与可变性 - 数据类型:标量类型 - 数据类型:复合类型 - 函数和注释(本文) - 控制流:if else - 控…

2026/10/18 10:54:34 阅读更多 →
【用proteus设计带有触摸电极的电路,当电路得电,便能以“1-4-7-2-5-8-3-6-9“的顺序循环显示数字】2024-12-17至2025-5-15

【用proteus设计带有触摸电极的电路,当电路得电,便能以“1-4-7-2-5-8-3-6-9“的顺序循环显示数字】2024-12-17至2025-5-15

缘由用proteus设计_嵌入式-CSDN问答 设计并制作带有触摸电极的电路,当电路得电,便能以“1-4-7-2-5-8-3-6-9"的顺序循环显示数字 从元件列表可以猜测到用二极管和电阻组成译码送4511到数码管显示4017的选择,一片555用于产生脉冲时钟信号…

2026/10/18 10:55:29 阅读更多 →

最新新闻

Aspen Plus Skill自动化更新系统设计与实现

Aspen Plus Skill自动化更新系统设计与实现

1. 项目概述:当流程模拟工程师开始写“自动更新脚本”你有没有过这样的经历:凌晨两点,盯着Aspen Plus界面里那个灰掉的“Update Skill”按钮发呆?刚改完一个热力学模型参数,想顺手把配套的Skill脚本同步更新到最新版&a…

2026/10/18 13:28:00 阅读更多 →
Java地理位置定位系统:NMEA解析、GeoHash+RTree空间索引与离线围栏判定

Java地理位置定位系统:NMEA解析、GeoHash+RTree空间索引与离线围栏判定

简介:这是一份面向高校计算机专业本科生的Java课程设计实践资源,聚焦地理位置定位功能开发,帮助学习者掌握Java GUI、数据库交互与GIS地图集成等综合技能。资源包含73个文件,主体为15个Java源码(含核心业务逻辑与Swing…

2026/10/18 13:28:00 阅读更多 →
多种小游戏合集开发复盘:架构、玩法与优化实践

多种小游戏合集开发复盘:架构、玩法与优化实践

最近我把手头零散写了很久的多个休闲小游戏统一收拢成了一个合集项目,项目标题就叫“多种小游戏”。起因很朴素:时间碎片化的玩家希望一个页面里能随时换着玩,我自己也想借这个机会把以前东一榔头西一棒子写的小游戏代码从逻辑到交互梳理清楚…

2026/10/18 13:28:00 阅读更多 →
Python自动化生成深度学习课件PPT:可复现的工程化实践

Python自动化生成深度学习课件PPT:可复现的工程化实践

简介:这是一份面向深度学习初学者与进阶学员的Python课件PPT,系统梳理从编程基础到主流模型再到行业落地的完整知识链路,帮助读者建立理论认知并衔接工程实践。内容覆盖Python语法与流程控制、数据清洗与标准化、线性回归、神经网络结构与激活…

2026/10/18 13:28:00 阅读更多 →
深度学习入门:从课件PPT到NumPy手写神经网络与PyTorch实战

深度学习入门:从课件PPT到NumPy手写神经网络与PyTorch实战

简介:这份《深度学习原理与应用》课件PPT面向高校学生、自学者及希望系统入门人工智能的开发者,帮助其建立从数学基础到经典模型的完整知识框架。课件共十一章,从深度学习概述讲起,依次覆盖线性代数、概率论与统计学、微积分与优化…

2026/10/18 13:28:00 阅读更多 →
Linux下NVML初始化失败:驱动与库版本不匹配的排查与修复指南

Linux下NVML初始化失败:驱动与库版本不匹配的排查与修复指南

1. 这个报错到底在说什么Failed to initialize NVML: Driver/library version mismatch这行字,但凡在 Linux 上跑过深度学习训练、折腾过显卡直通、或者手贱升级过一次系统内核的人,大概率都见过。它的字面意思很直白:NVML 初始化失败&#x…

2026/10/18 13:26:59 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →