Rust []和&;之间有什么区别;[]和vec![]?
以下三种声明之间有什么区别Rust []和&;之间有什么区别;[]和vec![]?,rust,Rust,以下三种声明之间有什么区别 let a = [1, 2, 3]; let b = &[1, 2, 3]; let c = vec![1, 2, 3]; 我明白什么是vec![]可以,但是什么时候应该使用[]和&[]呢?虽然这是基本信息,但只要你开始阅读锈迹文件或锈迹书籍,你就应该找到,这里有一些快速的解释: 设a=[1,2,3]是完全驻留在堆栈中的3个元素的数组 堆栈: +-----------+ | 1 | 2 | 3 | +-----------+ let b=&[1,2,3
let a = [1, 2, 3];
let b = &[1, 2, 3];
let c = vec![1, 2, 3];
我明白什么是
vec![]
可以,但是什么时候应该使用[]
和&[]
呢?虽然这是基本信息,但只要你开始阅读锈迹文件或锈迹书籍,你就应该找到,这里有一些快速的解释:
设a=[1,2,3]
是完全驻留在堆栈中的3个元素的数组
堆栈:
+-----------+
| 1 | 2 | 3 |
+-----------+
let b=&[1,2,3]
是对堆栈中3个元素的数组的引用:
堆栈:
+-----------+
| 1 | 2 | 3 |
+-----------+
^
+---+ |
指针:|*|---|
+---+
如果将其更改为让b:&[u32]=&[1,2,3]
,b
将不仅仅是对数组的引用,而是一个切片,因为Rust将执行。切片是也存储其指向的长度的引用(这类引用称为胖指针):
堆栈:
+-----------+
| 1 | 2 | 3 |
+-----------+
^
+---+ |
指针:|*|---|
+---+
长度:| 3|
+---+
让c=vec![1,2,3]
是一个动态分配的向量,即其数据将驻留在堆中,以便能够在运行时更改其大小,但它将在堆栈中存储对堆数据的引用、向量的长度和容量:
堆栈:堆:
+---+ +-----------+---+
指针:|*|------>|1 | 2 | 3 ||
+---+ +-----------+---+
长度:| 3|
+---+
容量:| 4|
+---+
你已经知道第三个了,所以没什么好解释的。数组和切片在书中有解释:嗨,谢谢你的解释。我正在读《铁锈编程书》。那本书中的大多数例子都使用了字符串片段。所以,我忘了其他类型的切片是什么样子。还在学习。