Rust:slice

骑猪看日落 2022-04-01 02:25 302阅读 0赞

slice是String的一部分引用。类似切片。

字符串slice

字符串slice:是一些存储在别处的UTF-8编码字符串数据的引用。
slice获取值的使用权但是没有得到值得所有权

  1. fn main() {
  2. let s = String::from("Hello world");
  3. let hello = &s[0..5]; //[start, end)
  4. let world = &s[6..11]; //[start, end);
  5. println!("{},{}", hello, world);
  6. let hello = &s[..5]; //[0, end)
  7. let world = &s[6..]; //[start, len);
  8. let string = &s[..]; //[0, len)
  9. println!("{},{}, {}", hello, world, string);
  10. let hello = &s[0..=4]; //[start, end]
  11. let world = &s[6..=10]; //[start, end]
  12. println!("{},{}", hello, world);
  13. }

在这里插入图片描述

数组slice

slice可以访问数组的一部分而不用进行拷贝。可以看成是数据的引用[或者视图]

  1. fn main() {
  2. let a = [1, 2, 3, 4, 5];
  3. let slice = &a[1..3]; //类型是&[i32] ,表示访问数组索引为
  4. println!("{}, {}", slice[0], slice[1]);
  5. }

在底层,slice代表一个指向数据开始的指针和一个长度。
在这里插入图片描述

  1. fn main() {
  2. fn mut_array(a:&mut [i32]){
  3. a[2] = 55;
  4. }
  5. println!("size of &[i32, 3]: {:?}", std::mem::size_of::<&[i32; 3]>()); //8:占用的空间大小与指针相同
  6. println!("size of &[i32, 3]: {:?}", std::mem::size_of::<&[i32]>()) ; //16
  7. let mut v:[i32; 3] = [1, 2, 3];
  8. {
  9. let s : &mut [i32; 3] = &mut v;
  10. mut_array(s); //引用没有获取值的所有权,因此修改了原数组的值
  11. }
  12. println!("{:?}", v)
  13. }

在这里插入图片描述
引用没有获取值的所有权,因此修改了原数组的值

参考: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

发表评论

表情:
评论列表 (有 0 条评论,302人围观)

还没有评论,来说两句吧...

相关阅读