Pointers 为什么打印指针与打印取消引用的指针打印的内容相同?

Pointers 为什么打印指针与打印取消引用的指针打印的内容相同?,pointers,rust,dereference,Pointers,Rust,Dereference,从防锈指南: 要取消引用(获取引用的值而不是引用本身)y,我们使用星号(*) 所以我做到了: fn main() { let x = 1; let ptr_y = &x; println!("x: {}, ptr_y: {}", x, *ptr_y); } 即使没有明确的解引用,这也会给我相同的结果(x=1;y=1): fn main() { let x = 1; let ptr_y = &x; println!("x: {},

从防锈指南:

要取消引用(获取引用的值而不是引用本身)
y
,我们使用星号(
*

所以我做到了:

fn main() {
    let x = 1;
    let ptr_y = &x;
    println!("x: {}, ptr_y: {}", x, *ptr_y);
}
即使没有明确的解引用,这也会给我相同的结果(x=1;y=1):

fn main() {
    let x = 1;
    let ptr_y = &x;
    println!("x: {}, ptr_y: {}", x, ptr_y);
}

为什么??不应该
ptr\u y
打印内存地址和
*ptr\u y
打印1吗?是否存在某种自动取消引用或我遗漏了什么?

Rust通常关注对象值(即内容的有趣部分),而不是对象标识(内存地址)。for
&T
,其中
T
实现
显示
直接与内容相关。手动展开该宏以实现
显示
字符串

impl<'a> Display for &'a String {
    fn fmt(&self, f: &mut Formatter) -> Result {
        Display::fmt(&**self, f)
    }
}
输出:

x:1,ptr_y:1,地址:0x7fff4eda6a24

Rust通常关注对象值(即内容的有趣部分),而不是对象标识(内存地址)。for
&T
,其中
T
实现
显示
直接与内容相关。手动展开该宏以实现
显示
字符串

impl<'a> Display for &'a String {
    fn fmt(&self, f: &mut Formatter) -> Result {
        Display::fmt(&**self, f)
    }
}
输出:

x:1,ptr_y:1,地址:0x7fff4eda6a24

我在你发帖后的《生锈指南》上读到关于指针的内容,他们只是使用“{:p},ptr_y”,因为“println!会自动为我们取消引用它”。一个简短的问题:我通常使用“Type name=value”或“int test=1”之类的词。似乎我不能在Rust中选择“let int test=1”给出编译器错误?我知道编译器会自动获取类型,但出于语法考虑,我希望在声明时在代码中写入:(.无论如何,感谢您的回答,即使我不知道宏到底在做什么:)。哦,是的,
{:p}
也可以工作,
p
只是打印地址..很好,这就是我所需要知道的:)。现在我需要掌握更大的东西,我只习惯于OO,对这个()之后的任何东西都没有任何线索,特别是模板和泛型的东西。谢谢你的帮助。在你发帖后,我在《生锈指南》上读到了一些关于指针的内容,他们只是使用“{:p},ptr_y”,因为“println!会自动为我们解除引用”。一个简短的问题:我通常使用“Type name=value”或“int test=1”之类的词。似乎我不能在Rust中选择“let int test=1”给出编译器错误?我知道编译器会自动获取类型,但出于语法考虑,我希望在声明时在代码中写入:(.无论如何,感谢您的回答,即使我不知道宏到底在做什么:)。哦,是的,
{:p}
也可以工作,
p
只是打印地址..很好,这就是我所需要知道的:)。现在我需要掌握更大的东西,我只习惯于OO,对这个()之后的任何东西都没有任何线索,特别是模板和泛型的东西。谢谢你的帮助。
fn main() {
 let x = &42;
 let address = format!("{:p}", x); // this produces something like '0x7f06092ac6d0'
 println!("{}", address);
}