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

Метод as_mut_ptr

Метод as_mut_ptr возвращает изменяемый сырой указатель типа *mut T на первый элемент контейнера. Метод не принимает параметров и не требует передачи аргументов. Полученный указатель можно использовать в unsafe-блоках для чтения и записи данных напрямую в память.

Метод доступен для типов Vec, String, Box<[T]> и других контейнеров, владеющих непрерывным участком памяти. Важно помнить, что указатель становится недействительным при перераспределении памяти контейнера.

Синтаксис

vec.as_mut_ptr()

Пример

Давайте получим изменяемый указатель на вектор и изменим первый элемент через него:

fn main() { let mut vec = vec![1, 2, 3, 4, 5]; let ptr = vec.as_mut_ptr(); unsafe { *ptr = 10; } println!("{:?}", vec); }

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

[10, 2, 3, 4, 5]

Пример

Давайте получим указатель на строку и изменим первый байт через него:

fn main() { let mut s = String::from("abcde"); let ptr = s.as_mut_ptr(); unsafe { *ptr = b'X'; } println!("{}", s); }

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

"Xbcde"

Пример

Давайте получим указатель и изменим несколько элементов вектора через арифметику указателей:

fn main() { let mut vec = vec![1, 2, 3, 4, 5]; let ptr = vec.as_mut_ptr(); unsafe { *ptr.add(0) = 100; *ptr.add(1) = 200; *ptr.add(2) = 300; } println!("{:?}", vec); }

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

[100, 200, 300, 4, 5]

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

  • метод as_ptr,
    который возвращает неизменяемый сырой указатель
  • тип mut-pointer,
    который представляет изменяемый сырой указатель
  • тип const-pointer,
    который представляет неизменяемый сырой указатель
  • ключевое слово unsafe,
    которое открывает доступ к небезопасным операциям
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить