参照しただけの場合は、してないものと値が同じにもかかわらず、*const usizeにキャストした途端結果が変わってしまいます...
&(hex + 0x12345) as *const usize
はusize
型の値0x1235f989
が置かれているアドレスを指すポインターを作ります。
(hex + 0x12345) as *const usize
はusize
型の値0x1235f989
をアドレスだと再解釈したポインターを作ります。(アドレス0x1235f989
を指すポインターを作ります)
rust
1fn main() {
2 let hex: usize = 0x1234d644;
3
4 // -------------------------------------------------------------------
5 // println!("{:?}", &(hex + 0x12345) as *const usize); //0x73a28ffc98
6
7 let hex_temp1a = hex + 0x12345; // usize型
8 println!("hex + 0x12345: {:x}", hex_temp1a);
9
10 let hex_temp1b = &hex_temp1a; // &usize型(hex_temp1aのアドレス)
11 println!("&(hex + 0x12345): {:p}", hex_temp1b);
12
13 // &usize(usizeの置かれたアドレス)を*const usize(アドレス)として解釈
14 println!("as *const usize: {:p}", hex_temp1b as *const usize);
15
16 // -------------------------------------------------------------------
17 // println!("{:?}", (hex + 0x12345) as *const usize); //0x1235f989
18
19 let hex_temp2 = hex + 0x12345;
20 println!("hex + 0x12345: {:x}", hex_temp2);
21
22 // usizeの値を*const usize(アドレス)として解釈
23 println!("as *const usize: {:p}", hex_temp2 as *const usize);
24}
実行結果
console
1hex + 0x12345: 1235f989
2&(hex + 0x12345): 0x16b102c10
3as *const usize: 0x16b102c10
4hex + 0x12345: 1235f989
5as *const usize: 0x1235f989
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/17 15:12
2021/09/17 23:47
2021/09/18 00:13