【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/7/23 18:46:39 阅读更多 →
【Rust自学】3.4. 函数和注释

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

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

2026/7/23 18:46:39 阅读更多 →
【用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/7/23 18:46:39 阅读更多 →

最新新闻

【Rust自学】14.6. 安装二进制crate

【Rust自学】14.6. 安装二进制crate

14.6 安装二进制 crate 14.6.1 从 crates.io 安装二进制 crate 通过 cargo install 命令可以从 crates.io 安装二进制 crate。这并不是为了替换系统包,它应该是 Rust 开发人员安装其他人共享工具的便捷方式。 它的限制是只能安装具有二进制目标(binar…

2026/7/23 18:58:44 阅读更多 →
【Rust自学】15.1. 使用Box<T>智能指针来指向堆内存上的数据

【Rust自学】15.1. 使用Box<T>智能指针来指向堆内存上的数据

15.1 使用Box T 智能指针来指向堆内存上的数据 15.1.1 Box<T> Box<T> 可以被简单地理解为一个箱子。它是最简单的智能指针&#xff0c;允许你把数据存储在堆上&#xff0c;而不是栈上。 具体实现是&#xff1a;Box<T> 在栈上有一小块内存&#xff0c;存放指向…

2026/7/23 18:58:44 阅读更多 →
【Rust自学】15.3. Deref trait Pt.2:隐式解引用转化与可变性

【Rust自学】15.3. Deref trait Pt.2:隐式解引用转化与可变性

15.3 Deref trait Pt.2&#xff1a;隐式解引用转化与可变性 15.3.1 函数和方法的隐式解引用转化 隐式解引用转化&#xff08;deref coercion&#xff09;是为函数和方法提供的一种便捷特性。 它的原理是&#xff1a;假如类型 T 实现了 Deref trait&#xff0c;那么解引用转化…

2026/7/23 18:58:44 阅读更多 →
【Rust自学】15.4. Drop trait:告别手动清理,释放即安全

【Rust自学】15.4. Drop trait:告别手动清理,释放即安全

15.4 Drop trait&#xff1a;告别手动清理&#xff0c;释放即安全 15.4.1 Drop trait 的意义 如果某个类型实现了 Drop trait&#xff0c;就可以让程序员自定义值离开作用域时发生的操作。例如释放文件或网络资源。 在某些语言中&#xff08;比如 C/C&#xff09;&#xff0c;对…

2026/7/23 18:58:44 阅读更多 →
SQL2025 数据库无法编辑

SQL2025 数据库无法编辑

目录 1.问题 2.查找到原因 3.安装最新的SQL管理工具 1.问题 安装了最近的SQL2025&#xff0c;可以查询等操作&#xff0c;但是无法进行编辑 2.查找到原因 SSMS 19.3 官方最高仅支持 SQL Server 2022&#xff0c;不支持 SQL Server 2025 现象&#xff1a;可以正常连接数据…

2026/7/23 18:58:44 阅读更多 →
矩阵账号视频同质化严重,AI 怎么做出差异化内容?

矩阵账号视频同质化严重,AI 怎么做出差异化内容?

一、发现问题&#xff1a;矩阵账号内容同质化导致流量衰退多数电商、MCN运营会搭建多平台、多账号矩阵体系&#xff0c;通过批量发布短视频扩大流量覆盖面。但矩阵运营过程中&#xff0c;普遍存在视频内容高度同质化的问题&#xff0c;多账号发布的视频镜头顺序、内容结构、文案…

2026/7/23 18:57:44 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;从单点好评到指数级传播&#xff1a;AI副业主理人必须掌握的4层口碑渗透模型&#xff08;含ROI测算表&#xff09; 当AI副业主理人不再仅满足于单次服务交付&#xff0c;而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;AI写作开头钩子设计&#xff1a;为什么你的AI文案完读率不足18%&#xff1f;——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后&#xff0c;我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南&#xff1a;免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中&#xff0c;我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源&#xff0c;还是配置文件、证书等&#xff0c;都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下&#xff0c;但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP&#xff08;轻量级目录访问协议&#xff09;作为企业级身份认证的黄金标准&#xff0c;已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时&#xff0c;发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”&#xff0c;而是以可解释、可审计、可迭代的方式&#xff0c;赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻