You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问Rust中存储值的内存地址?我的代码为何未显示地址?

Rust引用打印内存地址的问题解答

你遇到的情况是因为Rust的Display和Debug trait对引用类型做了自动解引用处理,并非你对引用/解引用的逻辑理解有误。

现有代码的行为解释

你的代码:

fn main() {
    let x = 2;
    let y = &x;

    println!("Value of x: {}", x);
    println!("Value of x: {:?}", &x);
    println!("Value of y: {:?}", y);
    println!("Value of y: {}", *y);
}

输出全为2的原因:

  • {}格式说明符调用Display trait,{:?}调用Debug trait。Rust为所有实现了Display/Debug的类型的引用,自动实现了对应的trait,处理时会自动解引用引用,直接输出指向的值。所以&x和y(均为&i32类型)用这两个格式符打印时,都会输出x的值2。
  • *y是显式解引用,得到x的值,打印2符合预期。

如何打印内存地址

要打印变量的内存地址,需要使用专门的{:p}格式说明符,它专门用于输出指针或引用的内存地址:

fn main() {
    let x = 2;
    let y = &x;

    println!("Value of x: {}", x);
    println!("Address of x: {:p}", &x); // 打印x的内存地址
    println!("Address stored in y: {:p}", y); // 打印y指向的地址(即x的地址)
    println!("Value of y (dereferenced): {}", *y);
}

示例输出:

Value of x: 2
Address of x: 0x7ffdxxxxxxxxx
Address stored in y: 0x7ffdxxxxxxxxx
Value of y (dereferenced): 2

(注:实际地址会因运行环境不同而变化)

总结

  • 你对解引用的理解是正确的,*y确实会获取引用指向的值。
  • println!的格式符{}和{:?}对引用会自动解引用,这是Rust的语法糖特性,方便直接输出引用指向的内容。
  • 打印内存地址必须使用{:p}格式说明符。

内容的提问来源于stack exchange,提问作者user1245262

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:19:52