Функция read
Функция read из модуля std::ptr читает значение типа T
из памяти по сырому указателю *const T. Она выполняет побитовое
копирование значения из указанного места в новое значение типа T.
Параметром функция принимает сырой указатель src, откуда нужно
прочитать значение. Функция является unsafe, потому что вызывающий
код должен гарантировать, что указатель действителен, правильно
выровнен и указывает на инициализированное значение типа T.
При чтении не происходит перемещения или копирования владения,
поэтому оригинальное значение остаётся в памяти без изменений.
Синтаксис
unsafe fn read<T>(src: *const T) -> T
Пример
Давайте прочитаем значение типа i32 по сырому указателю
на переменную:
fn main()
{
let x = 42;
let ptr = &x as *const i32;
let res = unsafe {
std::ptr::read(ptr)
};
println!("{}", res);
}
Результат выполнения кода:
42
Пример
Давайте прочитаем значение из середины массива по указателю со смещением:
fn main()
{
let arr = [10, 20, 30, 40, 50];
let ptr = unsafe {
arr.as_ptr().add(2)
};
let res = unsafe {
std::ptr::read(ptr)
};
println!("{}", res);
}
Результат выполнения кода:
30
Пример
Давайте прочитаем строку по сырому указателю:
fn main()
{
let s = String::from("abcde");
let ptr = &s as *const String;
let res = unsafe {
std::ptr::read(ptr)
};
println!("{}", res);
}
Результат выполнения кода:
"abcde"
Смотрите также
-
функция
write,
которая записывает значение по сырому указателю -
функция
read_unaligned,
которая читает значение по невыровненному указателю -
функция
copy,
которая копирует байты из одного места в другое -
функция
drop_in_place,
которая уничтожает значение по указателю