将指针的值存储在Rust中的另一个指针中

aup*_*eti 1 pointers rust

将指针存储为另一个指针的值的最佳方法是什么?

我有一个ptr类型为的变量*mut u8。如何将ptr指向的地址存储为另一个t类型也是的指针的值*mut u8。

我正在尝试做类似的事情

*t = ptr;
Run Code Online (Sandbox Code Playgroud)

我expected u8, found *-ptr出错了。我了解该地址ptr将为64位。我想填充从address开始的64位t。

She*_*ter 6

我有一个ptr类型为的变量*mut u8。如何将ptr指向的地址存储为另一个t也是类型的指针的值*mut u8

将一个指针分配给另一个指针:

use std::ptr;

fn main() {
    let ptr: *mut u8 = ptr::null_mut();
    let t: *mut u8 = ptr;
}
Run Code Online (Sandbox Code Playgroud)

ptr是一个指针,它指向的地址是NULL。现在,此值存储在t与以下类型相同的指针中ptr:t指向地址NULL。

use std::ptr;

fn main() {
    let ptr: *mut u8 = ptr::null_mut();
    let t: *mut u8 = ptr;
}
Run Code Online (Sandbox Code Playgroud)

如果要t成为另一个指针的地址的指针,则需要引用ptr。类型也不能相同:

use std::ptr;

fn main() {
    let ptr: *mut u8 = ptr::null_mut();
    let t: *const *mut u8 = &ptr;
}
Run Code Online (Sandbox Code Playgroud)
+-----+        +-----+
|     |        |     |
| ptr |        |  t  |
|     |        |     |
+--+--+        +--+--+
   |              |
   |              |
   +---->NULL<----+
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种写ptr指向特定位置的地址的方法,这样即使我没有地址也可以得到该地址t

原始指针没有与编译器强制关联的生存期。如果您想在值消失后保留某些地址,这对他们来说是一个理想的情况-您无需做任何事情:

use std::ptr;

fn do_not_dereference_this_result() -> *const u8 {
    let val: u8 = 127;
    let ptr: *const u8 = &val;
    ptr
}

fn main() {
    println!("{:p}", do_not_dereference_this_result())
}
Run Code Online (Sandbox Code Playgroud)

在极少数情况下,您可能希望将地址存储在usize(指针大小的整数值)中:

use std::ptr;

fn do_not_dereference_this_result() -> usize {
    let val: u8 = 127;
    let ptr: *const u8 = &val;
    ptr as usize
}

fn main() {
    println!("{:x}", do_not_dereference_this_result())
}
Run Code Online (Sandbox Code Playgroud)

这真的听起来像你通过指针如何工作,这是一个非常好的迹象,你是要拍自己的脚,如果你使用它们混淆。我强烈建议您在任何重要的代码中单独使用引用,直到您对指针的理解有所提高。