fn main() {
let mut foo1 = String::from("1asdasdasd");
let foollmut = &mut foo1;
let pointer = foollmut as *mut String;
let points_at1 = unsafe { &*pointer };
println!("points_at1 {}", points_at1);
let x = 5;
let raw = &x as *const i32;
//当你解引用一个裸指针,你要为它并不指向正确的地方负责。为此,你需要unsafe:
let points_at = unsafe { *raw };
println!("raw points at {}", points_at);
}
fn main() {
let a = 3.1 as i8;
let b = 100_i8 as i32;
let c = 'a' as u8; // 将字符'a'转换为整数,97
println!("{},{},{}",a,b,c);
let mut values: [i32; 2] = [1, 2];
let p1: *mut i32 = values.as_mut_ptr();
let first_address = p1 as usize; // 将p1内存地址转换为一个整数
let second_address = first_address + 4; // 4 == std::mem::size_of::<i32>(),i32类型占用4个字节,因此将内存地址 + 4
let p2 = second_address as *mut i32; // 访问该地址指向的下一个整数p2
unsafe {
*p2 += 1;
}
assert_eq!(values[1], 3);
let mut a = 1;
let aco = &mut a as *mut i32;
// let aco1 = aco as usize;
unsafe {
*aco += 1;
}
println!("aco0------{}",a);
}