fn main() { let c: i32 = 5; let rrc = &&c; println!("{}", rrc); // 5 println!("{}", *rrc); // 5 println!("{}",**rrc); // 5 }
在C/C++语言中,rrc类似于一个两级指针。在这个例子中,rrc在rust中并不意味着这一点。&和*在Rust中意味着什么?
&
*
qlckcl4x1#
它们都打印相同的内容的原因是Rust中的borrows(&T)通过将T: Display调度到所指向的类型来实现Display。如果要打印实际的指针值,必须使用{:p}。
&T
T: Display
Display
{:p}
let c = 5; let rrc = &&c; println!("{:p}", rrc); // 0x7ffc4e4c7590 println!("{:p}", *rrc); // 0x7ffc4e4c7584 println!("{}",**rrc); // 5
请参阅the playground。
oug3syen2#
这只是两个引用操作符,它们都打印5的原因是,当打印引用时,它会自动取消引用:
fn main() { let c: i32 = 5; let rrc = &c; let rrc = &rrc; // this is &&c }
2条答案
按热度按时间qlckcl4x1#
它们都打印相同的内容的原因是Rust中的borrows(
&T
)通过将T: Display
调度到所指向的类型来实现Display
。如果要打印实际的指针值,必须使用{:p}
。请参阅the playground。
oug3syen2#
这只是两个引用操作符,它们都打印5的原因是,当打印引用时,它会自动取消引用: