rust 这个在堆栈上打印地址的代码是什么意思?

xcitsw88  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(154)

我这样做是为了理解Rust中的地址。这是一个更复杂的实验的一部分。但首先,我想了解一下。

fn main () {    
    let mut b = 3;
    println!("in main i32        {:p}", &b);
    println!("in main i32        {:p}", &&b);
    println!("in main i32        {:p}", &&&b);
    println!("in main i32        {:p}", &&&&b);
    println!("in main i32        {:p}", &&&&&b);
}

除了第一个println!之外,我预计所有的println!都有编译器错误。但它编译并运行。我查到了每个电话的不同地址。

kxeu7u2r

kxeu7u2r1#

当您在Rust中使用&运算符来引用一个值时,它会创建一个指向原始值的内存位置的新引用。每增加一个&都会创建一个对前一个引用的新引用。在您的示例中,当您使用多个&运算符时,您正在创建对引用的引用。每个println!语句打印的地址对应于这些引用的内存位置。
因此,&b引用b的值,因此&&b引用&b的值,依此类推。

相关问题