Метод sub
Метод sub выполняет вычитание из указателя.
Он доступен для сырых указателей *const T и *mut T
и является unsafe-операцией. Первым параметром метод принимает
количество элементов, которое нужно вычесть из адреса указателя.
Вторым параметром передаётся указатель, из которого выполняется
вычитание. Метод возвращает новый указатель, смещённый назад
на указанное количество элементов.
Синтаксис
unsafe { ptr.sub(count) }
Пример
Давайте создадим указатель на последний элемент массива
и вычтем из него 2, чтобы получить указатель
на первый элемент:
fn main()
{
let arr = [10, 20, 30, 40, 50];
let ptr = arr.as_ptr();
unsafe
{
let shifted = ptr.add(4).sub(2);
println!("{}", *shifted);
}
}
Результат выполнения кода:
30
Пример
Давайте вычтем из указателя на третий элемент массива
значение 1 и прочитаем полученный элемент:
fn main()
{
let arr = [10, 20, 30, 40, 50];
let ptr = arr.as_ptr();
unsafe
{
let shifted = ptr.add(2).sub(1);
println!("{}", *shifted);
}
}
Результат выполнения кода:
20
Пример
Давайте используем метод sub с изменяемым указателем
и изменим значение элемента:
fn main()
{
let mut arr = [10, 20, 30, 40, 50];
let ptr = arr.as_mut_ptr();
unsafe
{
let shifted = ptr.add(3).sub(2);
*shifted = 99;
}
println!("{:?}", arr);
}
Результат выполнения кода:
[10, 99, 30, 40, 50]
Смотрите также
-
метод
add,
который выполняет прибавление к указателю -
метод
offset,
который смещает указатель на заданное число элементов -
метод
wrapping_add,
который выполняет прибавление с оборачиванием -
метод
read,
который читает значение по указателю