Rust切片不可变引用字符串静态数组动态数组

在Rust中,切片(Slice)是一种引用类型,用于引用连续的元素序列。切片提供了对序列的部分访问和操作,而无需拥有整个序列的所有权。切片可以用于字符串、静态数组和动态数组(Vec)等类型。

下面是对字符串、静态数组和动态数组的切片的示例代码:

**字符串切片**:

```rust

fn main() {

    let s = "Hello, World!";

    // 使用 & 符号创建字符串切片

    let slice = &s[7..12];

    println!("Slice: {}", slice); // 输出 "World"

}

```

**静态数组切片**:

```rust

fn main() {

    let arr: [i32; 5] = [1, 2, 3, 4, 5];

    // 使用 & 符号创建静态数组切片

    let slice = &arr[1..4];

    println!("Slice: {:?}", slice); // 输出 "[2, 3, 4]"

}

```

**动态数组切片**(Vec):

```rust

fn main() {

    let vec: Vec<i32> = vec![1, 2, 3, 4, 5];

    // 使用 & 符号创建动态数组切片

    let slice = &vec[1..4];

    println!("Slice: {:?}", slice); // 输出 "[2, 3, 4]"

}

```

在上述示例中,我们使用 `&` 符号创建切片,指定了切片的起始和结束索引(不包括结束索引所指的元素),来获取原始序列的一部分。注意切片的范围是左闭右开的。

无论是字符串、静态数组还是动态数组,切片都可以方便地进行访问和操作,例如迭代、切割、拼接等。切片还可以传递给函数,使得函数可以对切片进行处理而不需要拥有整个序列的所有权,这对于避免不必要的数据拷贝非常有用。