Метод 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,
которое открывает доступ к небезопасным операциям