如何将 Rust 数组转换为指针?

Gue*_*OCs 3 rust

我在谷歌上找不到简单的东西。如何将简单的 Rust 数组转换为指针?

如何获取指向 的指针[u8; 3]?我尝试这样做as *mut u8,但行不通。

kmd*_*eko 12

使用as_ptr()as_mut_ptr().

fn main() {
    let a: [u8; 3] = [1, 2, 3];
    println!("{:p}", a.as_ptr());
}
Run Code Online (Sandbox Code Playgroud)
0x7ffc97350edd
Run Code Online (Sandbox Code Playgroud)

数组强制切片,因此可以在数组上调用任何切片方法。


Cer*_*rus 6

请注意,Rust 中的数组只是内存块。它们不像 C 中的数组那样指向某些存储的对象,它们对象序列。

如果您有一些数据并想要获取指向它的指针,您通常会创建一个引用,因为只有引用(和其他指针)可以通过以下方式转换为指针as

fn main() {
    let a: [u8; 3] = [1, 2, 3]; // a blob of data on the stack...
    let a_ref = &a; // a shared reference to this data...
    let a_ptr = a_ref as *const u8; // and a pointer, created from the reference
    println!("{:p}", a_ptr);
}
Run Code Online (Sandbox Code Playgroud)

操场

  • FWIW C 数组也是“对象序列”,它们“衰减”为指针,但它们本身并不是指针。IIRC 与 C 数组的交互很奇怪且不一致,因为它向后兼容 BCPL,其中数组实际上是指向单独位置的指针。如果 C 数组实际上是指针,那么灵活的数组成员就不再是问题了。 (2认同)