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

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

Сырой указатель *const T - это неизменяемый сырой указатель на значение типа T. В отличие от обычных ссылок, сырые указатели не гарантируют ни валидность адреса, ни время жизни, ни выравнивание. Компилятор не отслеживает такие указатели, поэтому разыменование *const T возможно только внутри блока unsafe. Сырые указатели часто применяются при взаимодействии с C-кодом, при работе с аллокаторами и при реализации собственных структур данных. Значение типа *const T можно получить с помощью оператора взятия ссылки &, метода as_ptr или функций вроде std::ptr::null.

Синтаксис

let ptr: *const T = &value as *const T;

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

let ptr: *const T = &mut value as *const T;

Пример

Давайте создадим сырой указатель *const i32 на переменную и безопасно прочитаем значение через блок unsafe:

fn main() { let value: i32 = 42; let ptr: *const i32 = &value; unsafe { println!("{}", *ptr); } }

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

42

Пример

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

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

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

1

Пример

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

fn main() { let value: i32 = 100; let ptr: *const i32 = &value; let null_ptr: *const i32 = std::ptr::null(); println!("{}", ptr.is_null()); println!("{}", null_ptr.is_null()); }

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

false true

Пример

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

fn main() { let arr = [10, 20, 30, 40, 50]; let ptr: *const i32 = arr.as_ptr(); unsafe { let next = ptr.offset(2); println!("{}", *next); } }

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

30

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

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