Rust 中的数组长度是固定的,数组中的每个元素类型是一致的。
数组存储在内存中一段连续的空间内,连续
意味着相邻元素之间的距离一致。
let letters = ['a', 'b', 'c']; // letters 的类型为 [char; 3]
let first_letter = letters[0];
println!("first_letter is {}", first_letter); // first_letter is a
如果要修改数组中的某个元素,则数组创建时应声明为 可变的(mut)
。
let mut numbers = [11, 22, 44]; // 类型为 [i32; 3]
numbers[2] = 33;
println!("numbers is {}", numbers[2]); // numbers is 33
声明一个空数组时,应标识类型(元素类型、长度):
let words: [&str; 2]; // 标识数组长度为 2 ,元素类型为 &str
words = ["ok"; 2]; // 重复表达式,等效于 ["ok", "ok"]
println!("words is {:?}", words); // words is ["ok", "ok"]
usize
长度基于在目标机器 CPU 的位数:
- 32 位机器为 4 位
- 64 位机器位 8 位
let ints = [22; 5];
let length: usize = ints.len();
println!("length is {}", length); // length is 5
使用 std crate 的 men
模块查看内存占用大小
let mem_size_byte = std::mem::size_of_val(&ints);
println!("mem_size_byte is {}", mem_size_byte); // mem_size_byte is 20
获取数组切片
let mut slice: &[i32] = &ints;
println!("slice is {:?}", slice); // slice is [22, 22, 22, 22, 22]
slice = &ints[3..5];
println!("slice is {:?}", slice); // slice is [22, 22]
多阶数组
let d2: [[i32; 3]; 3] = [[9, 8, 7], [6, 5, 4], [3, 2, 1]];
let value = d2[1][0];
println!("value is {}", value); // value is 6
let d3: [[[&str; 100]; 20]; 5];
d3 = [[["ok"; 100]; 20]; 5];
println!("value d3[3][11][35] is {}", d3[3][11][35]) // value d3[3][11][35] is ok