给定此代码:
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);
和输出:
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
用作由强制转换创建的指针的地址.