Gol*_*ime 6 ffi rust raw-pointer
无论是在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);
}
Run Code Online (Sandbox Code Playgroud)
这段代码可以编译并运行。因为外部函数的用法与内部函数类似,所以我不明白为什么在那里使用原始指针作为默认值。
答案的一个要素也许可以从引用必须对齐这一事实中找到。由于使用未对齐的引用是未定义的行为,并且在 FFI 中无法保证指针的对齐,因此默认使用指针似乎是一个明智的选择