切片(Slice)
切片(Slice)是对数据值的部分引用,但其大小在编译时是不确定的。
相反,切片是一个双字对象(two-word object),第一个字是一个指向数据的指针,第二个字是切片的长度。这个 “字” 的宽度和 usize 相同,由处理器架构决定,比如在 x86-64 平台上就是 64 位。slice 可以用来借用数组的一部分。
slice 的类型标记为 &[T]。
切片结果是引用类型。
slice 是一类引用,所以它没有所有权。
let x = [1,2,3,4];
println!("{:?} {:?}", &x, &x[0..2]); // [1, 2, 3, 4] [1, 2]
let x = "abcd";
println!("{:?} {:?}", &x, &x[0..2]); //"abcd" "ab"
let x = (1, 0.1, "aaa");
println!("{:?}", &x); //(1, 0.1, "aaa")
元组变量x中,如果使用&x[0..2],则会报错。
let s = "Hello, world!";
这里 s 的类型是 &str,它是一个指向二进制程序特定位置的 slice。这也就是为什么字符串字面值是不可变的;&str 是一个不可变引用。
网友评论