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

Функция replace

Функция replace из модуля std::ptr заменяет значение, на которое указывает переданный указатель, на новое значение и возвращает старое значение. Первым параметром функция принимает изменяемый сырой указатель *mut T, а вторым - новое значение типа T. Функция помечена как unsafe, потому что вызывающий обязан гарантировать, что указатель действителен, выровнен и указывает на инициализированное значение.

В отличие от обычного присваивания по указателю, функция replace не уничтожает старое значение, а возвращает его вызывающему коду. Это позволяет безопасно извлечь значение, не копируя его и не оставляя память в неинициализированном состоянии.

Синтаксис

unsafe fn replace<T>(dst: *mut T, src: T) -> T

Пример

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

fn main() { let mut value = 10; let ptr = &mut value as *mut i32; let old = unsafe { std::ptr::replace(ptr, 20) }; println!("old: {}", old); println!("value: {}", value); }

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

old: 10 value: 20

Пример

Давайте применим функцию replace к элементу массива по указателю:

fn main() { let mut arr = [1, 2, 3, 4, 5]; let ptr = &mut arr[2] as *mut i32; let old = unsafe { std::ptr::replace(ptr, 100) }; println!("old: {}", old); println!("arr: {:?}", arr); }

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

old: 3 arr: [1, 2, 100, 4, 5]

Пример

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

fn main() { let mut s = String::from("abcde"); let ptr = &mut s as *mut String; let old = unsafe { std::ptr::replace(ptr, String::from("12345")) }; println!("old: {}", old); println!("s: {}", s); }

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

old: abcde s: 12345

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

  • функция read,
    которая читает значение по указателю без его замены
  • функция write,
    которая записывает значение по указателю без возврата старого
  • функция swap,
    которая меняет значения двух указателей местами
  • функция take,
    которая заменяет значение по указателю на Default
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить