РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1221 of 1245 menu

Функция 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,
    которая уничтожает значение по указателю
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить