fn _print_array(arr: &[i32])
{
println!("Array : {:?}", arr);
}
pub fn print_array()
{
let _a:[i32;3]=[1,2,3];
_print_array(&_a);
}
fn _print_vector(v: Vec<i32>)
{
println!("Vector : {:?}", v);
}
pub fn print_vector()
{
let _v:Vec<i32> = vec![1, 2, 3];
_print_vector(_v);
}
当我们将它们作为参数传递给函数时,为什么数组需要引用,而向量不需要?
[i32]
不是一个 array,它是一个 slice。切片没有大小,因此您不能将它们作为函数参数传递。你可以传递数组。
fn print_actual_array<const LEN: usize>(arr: [i32; LEN]) {
println!("Array : {:?}", arr);
}
您可以使用指针类型传递未确定大小的类型,例如引用 (
&
)、Box
或原始指针 (*const
)。 Vec
持有指向切片的 *const
指针。
当你这样做的时候
let _a: [i32; 3] = [1, 2, 3];
_print_array(&_a);
你实际上是在将数组强制转换成一个切片(类似于
Deref
或 as
),它看起来像这样明确
let _a: [i32; 3] = [1, 2, 3]
let _b: &[i32] = &_a;
_print_array(_b);