0
点赞
收藏
分享

微信扫一扫

Rust系列(6)数组类型

今天学习的内容是 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 中的数组类型,它是一种长度固定,用于组织相同类型的元素的集合类型,在开发中用的非常多。


举报

相关推荐

0 条评论