Veg*_*ega 26 pointers dereference rust
来自Rust指南:
要取消引用(获取引用的值而不是引用本身)
y,我们使用星号(*)
所以我做到了:
fn main() {
let x = 1;
let ptr_y = &x;
println!("x: {}, ptr_y: {}", x, *ptr_y);
}
Run Code Online (Sandbox Code Playgroud)
即使没有明确的解引用,这也给了我相同的结果(x = 1; y = 1):
fn main() {
let x = 1;
let ptr_y = &x;
println!("x: {}, ptr_y: {}", x, ptr_y);
}
Run Code Online (Sandbox Code Playgroud)
为什么?不应该ptr_y打印内存地址并*ptr_y打印1?是否有某种自动解除引用或者我错过了什么?
huo*_*uon 32
Rust通常关注对象值(即内容的有趣部分)而不是对象标识(内存地址).该实施Display了&T,其中T工具Display直接对推迟的内容.手动扩展该宏以String实现Display:
impl<'a> Display for &'a String {
fn fmt(&self, f: &mut Formatter) -> Result {
Display::fmt(&**self, f)
}
}
Run Code Online (Sandbox Code Playgroud)
也就是说,它只是直接打印其内容.
如果你关心对象标识/的内存地址,你可以使用Pointer格式化,{:p}:
fn main() {
let x = 1;
let ptr_y = &x;
println!("x: {}, ptr_y: {}, address: {:p}", x, ptr_y, ptr_y);
}
Run Code Online (Sandbox Code Playgroud)
输出:
x: 1, ptr_y: 1, address: 0x7fff4eda6a24
Run Code Online (Sandbox Code Playgroud)
fn main() {
let x = &42;
let address = format!("{:p}", x); // this produces something like '0x7f06092ac6d0'
println!("{}", address);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6537 次 |
| 最近记录: |