Rust如何从数组转换为std :: raw ::: Slice

Sha*_*mar 3 unsafe rust

std::raw::Slice 定义为:

pub struct Slice<T> {
    pub data: *const T,
    pub len: uint,
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试这样的事情:

use std::raw::Slice as RawSlice;
let a = [1i,2,3,4];
let s : RawSlice<int>= RawSlice{data: a as *const int, 
        len : a.len()};
Run Code Online (Sandbox Code Playgroud)

这不编译.error: non-scalar cast: [int, ..4] as *const int.我基本上无法弄清楚如何获得指向数组开头的指针.

类似的问题是:如何从[int]转换为*const int?

小智 6

您可以获取指向数组的第一个元素的指针并进行转换:

&a[0] as *const int
Run Code Online (Sandbox Code Playgroud)

  • 这大部分时间都可以工作,但是如果你有一个空切片(仍然指向一个有效的指针),它将失败边界检查和恐慌. (9认同)