Я читал, что арифметика указателей в Rust может выполняться через функцию pointer.offset()
, но ее всегда нужно реализовывать в unsafe code
:
fn main() {
let buf: [u32; 5] = [1, 2, 3, 4, 5];
let mut ptr1: *const u32 = buf.as_ptr();
unsafe {
let ptr2: *const u32 = buf.as_ptr().offset(buf.len() as isize);
while ptr1 < ptr2 {
println!("Address {:?} | Value {}", ptr1, *ptr1);
ptr1 = ptr1.offset(1);
}
}
}
Если я хочу безопасно кодировать на Rust, должен ли я кодировать без использования арифметики указателей и просто используя, например, соответствующий индекс массива? Или есть другой способ?
for reference_to_u32 in buf.iter()
, и вы должны использовать небезопасный код только в том случае, если у вас есть для этого причина. Существует бесконечное множество причин, почему вы можете захотеть использовать арифметику указателей, и в некоторых случаях использованиеpointer.offset()
является правильным инструментом, но без какой-либо более конкретной информации мы не можем ответить на этот вопрос. - person Sven Marnach   schedule 09.04.2019