Метод 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,
который возвращает сырой указатель на данные