如何在不使用临时变量的情况下将文本转换为 Rust 中的 mut?

use*_*570 -1 rust

这是为了传递给一个函数*mut T

pub unsafe fn a() {
    std::ptr::write_volatile(&581684,1);
}
Run Code Online (Sandbox Code Playgroud)

这当然会导致

error[E0308]: mismatched types
--> src/lib.rs:2:30
  |
2 | std::ptr::write_volatile(&581684,1);
  | ^^^^^^^ types differ in mutability
  |
 = note: expected raw pointer `*mut _`
              found reference `&{integer}`
Run Code Online (Sandbox Code Playgroud)

在一行中执行此操作的正确方法是什么?

use*_*342 5

您可以使用&mut 581684,将其转换为指针:

// write 581684_i32 on the stack and then overwrite it with 1_i32
std::ptr::write_volatile(&mut 581684 as *mut _, 1);
Run Code Online (Sandbox Code Playgroud)

但该代码非常可疑,因为它i32在堆栈上创建一个临时值,用 填充它581684,然后将其地址传递给 来write_volatile()填充它1。由于地址位于堆栈上,是在运行时选择的,并且没有任何特殊之处,因此根本没有必要只1在那里写入以丢弃该位置。

如果您的目的是将值 1 写入固定地址(可能是硬件观察到的地址),那么这&ADDRESS不是您想要的。相反,您应该使用as运算符将​​地址作为整数转换为指针,就像在 C 或 C++ 中所做的那样。假设你想写一个字节,它看起来像这样:

// store 1u8 at address 581684
std::ptr::write_volatile(581684 as *mut _, 1u8);
Run Code Online (Sandbox Code Playgroud)