Rust:slice 骑猪看日落 2022-04-01 02:25 193阅读 0赞 > slice是String的一部分引用。类似切片。 # 字符串slice # 字符串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); } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poaXpoZW5nZ3Vhbg_size_16_color_FFFFFF_t_70] # 数组slice # slice可以访问数组的一部分而不用进行拷贝。可以看成是数据的引用\[或者视图\] fn main() { let a = [1, 2, 3, 4, 5]; let slice = &a[1..3]; //类型是&[i32] ,表示访问数组索引为 println!("{}, {}", slice[0], slice[1]); } 在底层,slice代表一个指向数据开始的指针和一个长度。 ![在这里插入图片描述][2018122915250660.png] 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) } ![在这里插入图片描述][20190104175236956.png] 引用没有获取值的所有权,因此修改了原数组的值 参考:https://kaisery.github.io/trpl-zh-cn/ch04-03-slices.html https://kaisery.gitbooks.io/rust-book-chinese/content/content/Primitive%20Types%20%E5%8E%9F%E7%94%9F%E7%B1%BB%E5%9E%8B.html [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poaXpoZW5nZ3Vhbg_size_16_color_FFFFFF_t_70]: /images/20220401/f4099fb4ac5941dabc547c485b762481.png [2018122915250660.png]: /images/20220401/75cfc3c19e8e43dcb02332cf05f3e6cb.png [20190104175236956.png]: /images/20220401/9aa67d197d454c66bb63caae49c98fc6.png
还没有评论,来说两句吧...