给定此代码:

let mut a = 5;
let b = &mut a; 
*b = 6;
println!("{:p}",a as *const i32);

和输出:

0x6

推荐答案

简化代码以隔离您所询问的行,我们有以下代码:

let mut a = 5;
let b = &mut a; 
*b = 6;
println!("{:p}", a as *const i32);

由于b被指定为对a的可变引用,因此行*b = 6将存储在a中的值修改为6.

将一个整数转换为一个指针,就像在a as *const i32中所做的那样,将该整数值(在本例中为6)视为指针的地址.因此,a as *const i32正在创建指向存储在0x6处的数据的指针.

打印指针时,就像在示例中的其他行中所做的那样,它打印指针的地址.因此,println!("{:p}", a as *const i32);打印地址0x6,因为值a用作由强制转换创建的指针的地址.

Rust相关问答推荐

为什么迭代器上的`. map(...)`的返回类型如此复杂?

收集RangeInclusive T到Vec T<><>

带扫描的铁 rust 使用滤镜

这种获取-释放关系是如何运作的?

Tokio_Postgres行上未显示退回特性的生存期,且生命周期 不够长

如何将映射反序列化为具有与键匹配的字段的定制 struct 的向量?

try 创建随机数以常量

如何使用Actix Web for Rust高效地为大文件服务

Rust,如何从 Rc> 复制内部值并返回它?

信号量释放后 Rust 输出挂起线程

`use` 和 `crate` 关键字在 Rust 项目中效果不佳

返回优化后的标题:返回异步块的闭包的类型擦除

在1.5n次比较中找到整数向量中的最大和次大整数

为什么具有 Vec 变体的枚举没有内存开销?

使用 serde_json 进一步处理字段

通用函数中的生命周期扣除和borrow (通用测试需要)

在单独的线程上运行 actix web 服务器

为什么这个闭包没有比 var 长寿?

如何断言代码不会在测试中编译?

如何用另一个变量向量置换 rust simd 向量?