整数转换为指针是什么意思?

问题描述 投票:0回答:1

给出这段代码:

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

和输出:

0x5b97aff97c
0x6
0x5b97aff97c
0x5b97aff97c

输出第二行'a'的地址代表什么? 记忆里有吗?它没有改变,而其他一切都在改变。为什么?

rust
1个回答
0
投票

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

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
的值用作强制转换创建的指针的地址。

© www.soinside.com 2019 - 2024. All rights reserved.