fn main() {

    let x = 42; // 不可变变量
    let ptr = &x as *const i32 as *mut i32;
    println!("原始 x = {}", x);
    unsafe { println!("原始指针值 *ptr = {}", *ptr); }

    unsafe {
        // 关键点, 需要把原ptr消耗掉
        let ptr = ptr.wrapping_add(0);
        *ptr = 666; // 强制修改内存
        println!("修改后 x = {}", *ptr); // 输出 666
        println!("原始 x = {}", x);      // 输出 666
    }

    unsafe {
        let ptr = ptr as usize;
        // 关键点, 需要把原ptr消耗掉
        let ptr = ptr + 0;
        let ptr = ptr as *mut i32;
        *ptr += 1; // 强制修改内存
        println!("修改后 x = {}", *ptr); // 输出 666
        println!("原始 x = {}", x);      // 输出 666
    }


}