Сырой указатель *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,
которая записывает значение по сырому указателю