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

Сырой указатель *mut T

Сырой указатель *mut T - это изменяемый сырой указатель на значение типа T. В отличие от ссылок &mut T, сырые указатели не подчиняются правилам владения и заимствования, не гарантируют ненулевой адрес и не проверяются компилятором на корректность. Параметром тип T задаёт тип значения, на которое указывает указатель. Работа с таким указателем возможна только внутри блока unsafe, поскольку программист сам несёт ответственность за валидность адреса и соблюдение правил алиасинга.

Синтаксис

let ptr: *mut T;

Пример

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

fn main() { let mut x = 10; let ptr: *mut i32 = &mut x; unsafe { *ptr = 20; } println!("{}", x); }

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

20

Пример

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

fn main() { let mut v = vec![1, 2, 3, 4, 5]; let ptr: *mut i32 = &mut v[2]; unsafe { println!("{}", *ptr); } }

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

3

Пример

Давайте проверим указатель на null с помощью функции is_null:

fn main() { let ptr: *mut i32 = std::ptr::null_mut(); if ptr.is_null() { println!("pointer is null"); } }

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

"pointer is null"

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

  • указатель *const T,
    который является неизменяемым сырым указателем
  • функция null_mut,
    которая создаёт нулевой изменяемый сырой указатель
  • метод as_mut_ptr,
    который возвращает изменяемый сырой указатель на данные
  • функция write,
    которая записывает значение по сырому указателю
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить