slice是String的一部分引用。类似切片。
字符串slice:是一些存储在别处的UTF-8编码字符串数据的引用。
slice获取值的使用权但是没有得到值得所有权
fn main() {
let s = String::from("Hello world");
let hello = &s[0..5]; //[start, end)
let world = &s[6..11]; //[start, end);
println!("{},{}", hello, world);
let hello = &s[..5]; //[0, end)
let world = &s[6..]; //[start, len);
let string = &s[..]; //[0, len)
println!("{},{}, {}", hello, world, string);
let hello = &s[0..=4]; //[start, end]
let world = &s[6..=10]; //[start, end]
println!("{},{}", hello, world);
}
slice可以访问数组的一部分而不用进行拷贝。可以看成是数据的引用[或者视图]
fn main() {
let a = [1, 2, 3, 4, 5];
let slice = &a[1..3]; //类型是&[i32] ,表示访问数组索引为
println!("{}, {}", slice[0], slice[1]);
}
fn main() {
fn mut_array(a:&mut [i32]){
a[2] = 55;
}
println!("size of &[i32, 3]: {:?}", std::mem::size_of::<&[i32; 3]>()); //8:占用的空间大小与指针相同
println!("size of &[i32, 3]: {:?}", std::mem::size_of::<&[i32]>()) ; //16
let mut v:[i32; 3] = [1, 2, 3];
{
let s : &mut [i32; 3] = &mut v;
mut_array(s); //引用没有获取值的所有权,因此修改了原数组的值
}
println!("{:?}", v)
}
参考:https://kaisery.github.io/trpl-zh-cn/ch04-03-slices.html
https://kaisery.gitbooks.io/rust-book-chinese/content/content/Primitive Types 原生类型.html