6 Ноя в 07:23
3 +3
0
Ответы
1
Это выражение в Rust приводит изменяемую ссылку в "сырый" указатель. Конкретно:
- `r1` получит тип `*mut i32`.
- `&mut x as *mut i32` берёт mutable reference `&mut x` и кастует её в raw pointer `*mut i32` (без копирования адреса).
- Такой указатель обходится без проверки borrow checker — чтение/запись через него безопасны только внутри `unsafe` блока.
Короткий пример (для иллюстрации; числовые литералы выделены KaTeX):
let mut x = 101010;
let r1 = &mut x as *mut i32;
unsafe {
*r1 = 555; // присвоение через сырый указатель
println!("{}", *r1);
}
Замечания:
- Приведение не меняет адреса и выполняется в ноль затрат.
- Дехранилище/доступ через `r1` небезопасны (требуют `unsafe`).
- `*mut` не несёт lifetime — вы обязаны гарантировать, что `x` жив, пока используете `r1`.
- Для безопасного получения адреса поля в некоторых случаях предпочтительнее `std::ptr::addr_of_mut!` (избегает создания промежуточной ссылки).
- По возможности используйте обычные ссылки `&`/`&mut`; raw pointers нужны для FFI и низкоуровневых задач.
6 Ноя в 07:53
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир