Rust:slice

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);
}

在这里插入图片描述

数组slice

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

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

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

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%20Types%20%E5%8E%9F%E7%94%9F%E7%B1%BB%E5%9E%8B.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值