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

Rust(7):数组类型

今天学习的内容是 Rust 中的数组类型

创建数组

数组是一种长度固定,元素类型相同的数据存储结构。

JS 中的数组长度可变,元素类型不限,和 Rust 有很大区别。

在 Rust 中使用 [T;N] 表示数组类型,其中 T 表示数组内元素的类型,N 表示数组的长度,比如

// 定义一个数组,元素类型是 u32,长度是5,即有5个元素
let arr: [u32; 5] = [1, 2, 3, 4, 5];

如果数组的初始化元素的值都相同,则可以使用简化写法:

// 创建一个元素均为 1 的,长度为 5 的数组
let arr: [u32; 5] = [1; 5];

使用数组

要使用数组中的元素,可以通过下标索引。数组的索引从 0 开始:

let arr: [u32; 5] = [1, 2, 3, 4, 5];

println!("{}", arr[2]); // 3   

使用索引修改元素:

arr[3] = 10;

数组类型也提供了一个关联方式,比如使用 len 获取数组的长度

println!("{}", arr.len()); // 5

数组越界访问

数组不能越界访问,即不能访问超过数组长度的位置的元素。

对于索引的越界访问,如果索引能在编译期确定,就可以在编译时报错;否则就只能在运行时报错,比如:

let arr: [u32; 5] = [1, 2, 3, 4, 5];

println!("{}", arr[5]); 

会提示:thread 'main' panicked at 'index out of bounds: the len is 5 but the index is 5',意思是索引超过边界了,长度为 5 索引也为 5。

如果是运行时报错的情况,比如变量 index 是一个由字符串转为整数类型的值,它在运行时才会进行转换:

// 一个字符串在 parse 成整数类型时可以出错,使用 `upwrap` 承接,当程序出错的时候就会退出运行
let index = "5".parse::<u32>().unwrap();
println!("{}", arr[index]);

程序在编译时不会报错,在运行时就会报越界访问的错误。

小结

Rust 中的数组类型是一种长度固定,用于组织相同类型的元素的集合类型,在开发中用的非常多。

相关文章:

  • STM32——FLASH闪存编程原理与步骤
  • 计算机毕业设计之java+javaweb的大学生就业帮助系统-就业招聘网站
  • 跳表论文解读
  • 1061:求整数的和与均值
  • Day04JavaWeb第四次笔记---Maven的使用
  • Unrecognized option: --no-transfer-progress
  • 加载指定 having lines separator 时max_data_processor 不起作用
  • 高薪程序员面试题精讲系列150之电商专题(上)-你们的电商项目有什么特色?是B2B还是B2C、还是C2C的?直播电商你了解吗?
  • kafka是啥?虽然很难学,但是实验入门很简单
  • MySQL8.0 索引优化-invisible index
  • 基于java仓库管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  • C++对象内存故事, 一个对象是如何由子对象来构成的?
  • 软件过程模型(软件开发模型)
  • 138-基于51单片机的教室智能照明灯控制系统光控人数检测(原理图+源程序+元件清单+PCB)
  • PIE-Engine教程—中国降水分布可视化加载以2018年为例(含图例添加)
  • 时间复杂度分析经典问题——最大子序列和
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • bootstrap创建登录注册页面
  • docker-consul
  • k个最大的数及变种小结
  • MQ框架的比较
  • React系列之 Redux 架构模式
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 电商搜索引擎的架构设计和性能优化
  • 区块链分支循环
  • 如何利用MongoDB打造TOP榜小程序
  • 使用 Docker 部署 Spring Boot项目
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 选择阿里云数据库HBase版十大理由
  • ​flutter 代码混淆
  • ​插件化DPI在商用WIFI中的价值
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​用户画像从0到100的构建思路
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $.ajax()参数及用法
  • (4.10~4.16)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (二)斐波那契Fabonacci函数
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (正则)提取页面里的img标签
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET与 java通用的3DES加密解密方法
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @DataRedisTest测试redis从未如此丝滑
  • @vue/cli脚手架
  • []指针
  • [20161101]rman备份与数据文件变化7.txt
  • [20171102]视图v$session中process字段含义