Функция slice_from_raw_parts
Функция slice_from_raw_parts создаёт сырой срез
*const [T] из указателя на первый элемент
и количества элементов. Первым параметром функция принимает
сырой указатель *const T на начало данных,
а вторым - длину будущего среза в элементах.
Функция не проверяет корректность указателя и длины,
поэтому она помечена как unsafe.
Синтаксис
std::ptr::slice_from_raw_parts(data, len)
Пример
Давайте создадим сырой срез из массива и выведем его длину:
fn main()
{
let arr = [1, 2, 3, 4, 5];
let ptr = arr.as_ptr();
let raw_slice = std::ptr::slice_from_raw_parts(ptr, 5);
unsafe {
println!("{}", (*raw_slice).len());
}
}
Результат выполнения кода:
5
Пример
Давайте создадим сырой срез и получим доступ к его элементам:
fn main()
{
let arr = [10, 20, 30, 40, 50];
let ptr = arr.as_ptr();
let raw_slice = std::ptr::slice_from_raw_parts(ptr, 3);
unsafe {
let slice = &*raw_slice;
println!("{:?}", slice);
}
}
Результат выполнения кода:
[10, 20, 30]
Пример
Давайте создадим пустой сырой срез с нулевой длиной:
fn main()
{
let arr = [1, 2, 3, 4, 5];
let ptr = arr.as_ptr();
let raw_slice = std::ptr::slice_from_raw_parts(ptr, 0);
unsafe {
println!("{}", (*raw_slice).len());
}
}
Результат выполнения кода:
0
Смотрите также
-
функция
slice_from_raw_parts,
которая создаёт сырой срез из указателя и длины -
тип
const pointer,
который представляет сырой неизменяемый указатель -
метод
as_ptr,
который возвращает сырой указатель на данные -
ключевое слово
unsafe,
которое позволяет выполнять небезопасные операции