手记

【九月打卡】第10天 Rust 数组类型

课程章节: 第3章 Rust基本数据类型 3.8 数组

主讲老师叶枭

课程内容:

今天学习的内容是 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   

数组类型也提供了一个关联方式,比如使用 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人推荐
随时随地看视频
慕课网APP