在ffi教程和自动生成的接口中,大多数情况下使用*const T
指针。据我所知,&T
和*const T
之间的区别仅在于*const T
不必满足某些条件,如非空,并且不安全地解引用。
fn main() {
unsafe {
do_something(&TestStruct {data: 3})
}
}
#[repr(C)]
pub struct TestStruct {
data: u32
}
extern "C" {
fn do_something(arg: &TestStruct);
}
这段代码可以编译并运行。由于外部函数的使用方法类似于内部函数,我不明白为什么在默认情况下使用原始指针。