rust 裸指针

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);
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值