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

Функция write

Функция write из модуля std::ptr записывает значение в указанное место памяти. Она принимает первым параметром указатель на область памяти, а вторым - значение, которое нужно записать. Функция не читает и не удаляет старое содержимое памяти, что делает её полезной для инициализации неинициализированной памяти. Поскольку функция работает с сырыми указателями, её вызов является небезопасным и требует блока unsafe.

Синтаксис

unsafe { std::ptr::write(dst, src) }

Пример

Давайте запишем число 12345 в неинициализированную память и прочитаем его:

use std::ptr; fn main() { let mut value: i32 = 0; let ptr = &mut value as *mut i32; unsafe { ptr::write(ptr, 12345); println!("{}", *ptr); } }

Результат выполнения кода:

12345

Пример

Давайте запишем строку "abcde" в неинициализированную память с помощью MaybeUninit:

use std::mem::MaybeUninit; use std::ptr; fn main() { let mut uninit: MaybeUninit<String> = MaybeUninit::uninit(); let ptr = uninit.as_mut_ptr(); unsafe { ptr::write(ptr, String::from("abcde")); let value = uninit.assume_init(); println!("{}", value); } }

Результат выполнения кода:

"abcde"

Пример

Давайте запишем элемент вектора по указателю и выведем весь вектор:

use std::ptr; fn main() { let mut v = vec![1, 2, 3, 4, 5]; let ptr = v.as_mut_ptr(); unsafe { ptr::write(ptr.add(2), 99); println!("{:?}", v); } }

Результат выполнения кода:

[1, 2, 99, 4, 5]

Смотрите также

  • функция read,
    которая читает значение из указателя
  • функция write_unaligned,
    которая записывает значение по невыровненному указателю
  • метод write,
    который записывает значение в MaybeUninit
  • функция drop_in_place,
    которая уничтожает значение по указателю
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить