我看到切片的类型为[T],但当我们引用数组时,返回的切片的类型是
&[i32;_]
即每个VSCode w/Rust Analyzer。但是它不应该是类型吗
&[i32]
let arr:[i32;_] = [1,2];
let r_arr:&[i32;_] = &arr;
我很困惑,不清楚如何阅读&[i32;_](显然是Slice(与&[i32;N](数组(,这两种类型的定义似乎不明确且非常相似。
&[i32;_]
是数组的借位,而&[i32]
是切片,意味着动态大小的数组或数组的一部分。
&[i32;_]
意味着借用的数组具有静态已知的大小_
,这意味着该大小是通过给定初始化器[1, 2]
的项计数静态推断的(必须是2,但铁锈分析器没有详细显示(。
&[i32]
意味着它是一个切片,在编译时没有已知的大小,并且在运行时动态调整大小。
&[i32;_]
是一个瘦指针,这意味着&[i32;_]
的实际内存布局只是指向数组起始位置的原始usize
指针。
&[i32]
是一个胖指针,这意味着&[i32]
的实际内存布局由2个usize
s组成。一个是指向切片起始位置的原始指针,另一个是切片的长度。