Rust的数组(Array)类型
Rust的数组(Array)类型
数组(array)与元组不同,数组中的每个元素的类型必须相同。数组的特点是:
- 数组大小固定
- 元素均为相同类型
- 默认不可变
可以通过 let mut
关键字定义可变绑定的 mut_arr,但是也只能通过下标修改数组元素的值。
数组的类型签名为 [T; N]:
- T 是泛型标记,代表数组中元素的具体类型
- N 是数组长度,是一个 编译时常量,必须在编译时确认值,而且不可改变。
Rust 中数组的定义和使用方式:
// 声明数组,默认不可变
let arr: [i32; 3] = [1, 2, 3];
// 声明可变数组
let mut mut_arr = [1, 2, 3];
assert_eq!(1, mut_arr[0]);
// 通过下标修改可变数组元素的值
mut_arr[0] = 3;
assert_eq!(3, mut_arr[0]);
// 创建初始值为0大小为10的数组
let init_arr = [0; 10];
assert_eq!(0, init_arr[5]);
assert_eq!(10, init_arr.len());
// 下标越界
// error: index out of bounds: the len is 3 but the index is 5
println!("{:?}", arr[5]);
如果下标越界,rust会以 panic 的方式报错。
数组内存分配
数组是在栈(stack)而不是在堆(heap)上为数据分配内存空间。
对于原始固定长度数组,只有实现了 Copy trait 的类型才能作为其元素,也就是说,只有可以在栈上存放的元素才可以存放在该类型的数组中。
未来,rust将支持VLA(variable-length array) 数组,即可变长度数组。