在Rust中,"&&“和星星”**"表示什么?

dfddblmv  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(102)
fn main() {
    let c: i32 = 5;
    let rrc = &&c;
    println!("{}", rrc); // 5
    println!("{}", *rrc); // 5
    println!("{}",**rrc); // 5
}

在C/C++语言中,rrc类似于一个两级指针。在这个例子中,rrc在rust中并不意味着这一点。&*在Rust中意味着什么?

qlckcl4x

qlckcl4x1#

它们都打印相同的内容的原因是Rust中的borrows(&T)通过将T: Display调度到所指向的类型来实现Display。如果要打印实际的指针值,必须使用{:p}

let c = 5;
let rrc = &&c;
println!("{:p}", rrc); // 0x7ffc4e4c7590
println!("{:p}", *rrc); // 0x7ffc4e4c7584
println!("{}",**rrc); // 5

请参阅the playground

oug3syen

oug3syen2#

这只是两个引用操作符,它们都打印5的原因是,当打印引用时,它会自动取消引用:

fn main() {
  let c: i32 = 5;
  let rrc = &c;
  let rrc = &rrc; // this is &&c
}

相关问题