我想在下面的示例中摆脱强制转换:
let s = &[1, 2, 3];
let mut i = s.as_ptr();
unsafe {
let mut j = i.offset(s.len() as isize - 1);
do pointer arithmetic on i and j...
}
有更好的方法吗?我一直在查看Rust参考文献中s.last_as_ptr()
的内容,但还没有找到它。
编辑:我应该首先阅读指针基础知识https://doc.rust-lang.org/book/first-edition/raw-pointers.html
这绝对是你不需要安全的东西。如果您确实需要指针而不是引用,则可以将结果引用转换为指针。 - Shepmaster
@Shepmaster& @Josh Lee:我应该提供一个完整的例子,我需要在i
和j
上做指针算术。我编辑了代码以反映这一点。
感谢指出.last(),这似乎是一个明显的选择,因为它返回一个引用。
发布此问题时我遗漏的信息是引用/借用可以转换为指针。
这似乎是我在寻找let mut j = s.last().unwrap() as *const _;