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|
    +---+
    
    你已经知道第三个了,所以没什么好解释的。数组和切片在书中有解释:嗨,谢谢你的解释。我正在读《铁锈编程书》。那本书中的大多数例子都使用了字符串片段。所以,我忘了其他类型的切片是什么样子。还在学习。