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

Метод add

Метод add является небезопасным методом для сырых указателей (*const T и *mut T). Он выполняет арифметику указателей, возвращая новый указатель, смещённый на заданное количество элементов типа T. Параметром метод принимает значение count типа usize - количество элементов, на которое нужно сместить указатель. Смещение вычисляется в байтах как count * size_of::<T>. Метод не проверяет границы и не гарантирует, что результат указывает на допустимую память, поэтому его вызов требует блока unsafe.

Синтаксис

unsafe { ptr.add(count) }

Пример

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

fn main() { let arr = [10, 20, 30, 40, 50]; let ptr = arr.as_ptr(); unsafe { let shifted = ptr.add(2); let res = *shifted; println!("{}", res); } }

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

30

Пример

Давайте используем метод add с изменяемым указателем, чтобы записать новое значение во второй элемент массива:

fn main() { let mut arr = [1, 2, 3, 4, 5]; let ptr = arr.as_mut_ptr(); unsafe { let shifted = ptr.add(1); *shifted = 99; } println!("{:?}", arr); }

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

[1, 99, 3, 4, 5]

Пример

Давайте пройдём по всем элементам массива, используя метод add для последовательного смещения указателя:

fn main() { let arr = [100, 200, 300, 400, 500]; let ptr = arr.as_ptr(); for i in 0..arr.len() { unsafe { let val = *ptr.add(i); println!("{}", val); } } }

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

100 200 300 400 500

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

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