rust指针

RUST 学习笔记2:

提示:常用指针转换

use std::os::raw::c_void;
fn main() {
    struct User{age:i32};
	let mut user = User{age:11};

    let p = &user as *const User as i32;
    println!("raddr:{:0x}",p);

	//获取user raw pointer
	let rp_user = &mut user as *mut User; 
	//获取cpointer
	let cp_user = rp_user as *mut c_void;
	//windapi longptr
	let lptr_user = cp_user as isize;
	println!("caddr:{:0x}",&lptr_user);

    //解引用
    //raw pointer 解引用
    let user1  = unsafe{&*rp_user};
    println!("age:{}",user1.age);

    //转换成罗指针后解引用   
    //cpointer 解引用
    let user2 =unsafe{&*(cp_user as *const User)};
    println!("age:{}",user2.age);
    
    //longptr 解引用
    let user3 =unsafe{&*(lptr_user as *const User)};
    println!("age:{}",user3.age);


    //可变解引用
    let mut user4 = unsafe{&mut *(cp_user as *mut User)};
    user4.age = 16;
    println!("age:{}",user4.age);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值