Update chapter_3_7_3.md

This commit is contained in:
令狐一冲
2023-05-17 15:23:36 +08:00
committed by GitHub
parent dc24830e58
commit 6a0834e89f

View File

@@ -1,7 +1,8 @@
Slice类型
### 3.7.3 Slice类型
Slice切片类型表示引用集合中一段连续的元素序列。Slice是一类引用没有所有权。Rust常见类型中有三种支持Slice的操作分别是String、数组、Vec类型。
1. Slice类型
#### 1. Slice类型
假定s是可被切片的数据则对应的操作有
- s[n1..n2]获取s中index=n1到index=n2(不包括n2)之间的所有元素;
- s[n1..]获取s中index=n1到最后一个元素之间的所有元素
@@ -10,6 +11,7 @@ Slice切片类型表示引用集合中一段连续的元素序列。Sli
- 其他表示包含范围的方式如s[n1..=n2]表示取index=n1到index=n2(包括n2)之间的所有元素。
Rust中几乎总是使用切片数据的引用。切片数据的引用对应的数据类型描述为&[T]或&mut [T]前者不可通过Slice引用来修改源数据后者可修改源数据。示例如下
```Rust
fn main(){
let mut arr = [11,22,33,44];
@@ -21,12 +23,16 @@ fn main(){
println!("{:?}", arr_slice2);// [1111,22];
println!("{:?}", arr);// [1111,22,33,44];
}
```
Slice类型是一个胖指针包含两个字段
- 第一个字段是指向源数据中切片起点元素的指针;
- 第二个字段是切片数据中包含的元素数量,即切片的长度。
2. String的切片类型
#### 2. String的切片类型
String的切片类型为&str而不是&String其使用方式如下
```Rust
fn main() {
let s = String::from("hello world!");
let s1 = &s[6..]; // 切片类型&str
@@ -34,6 +40,8 @@ fn main() {
println!("{:?}", s1);
println!("{:?}", s2);
}
```
&str和&String的内存布局如下
![注释](../../assets/13.png)