Rust引用借用 vs 原始指针

rust 复制代码
let v: i32 = 10;
let v1 = &v;
let a: *const i32 = &v;
println!("a={:p}", a);
let b = a as *mut i32;  //无法从&v直接转换成*mut i32,需要从*const i32过度
println!("b={:p}", b);
unsafe {
    *b+=1;
}
println!("v={}   v1={}", v, v1);

输出

复制代码
a=0xa7c8fb4d8
b=0xa7c8fb4d8
v=11   v1=11
rust 复制代码
    let mut mv: i32 = 10;
    let mut mv2 = &mut mv;
    *mv2 = *mv2 + 1;
    let p1 = mv2 as *const i32 as *mut i32;
    unsafe {
        *p1 += 1;
    }
    //let p2 = mv2 as *const i32;
    let mv3 = unsafe {
        let i: i32 = *p1;
        i
    };
    println!("mv2={}  mv3={}", mv2, mv3);

mv2=12 mv3=12

rust 复制代码
    use std::borrow::Cow;
    use std::os::raw::c_char;
    use std::ffi::CStr;
    let C: [u8; 11] = [116, 104, 97, 110, 107, 115, 102, 105, 115, 104, 0];
    let c_str: Cow<str>;
    unsafe{
        let c_ptr = &C as *const u8 as *const c_char;
        c_str = CStr::from_ptr(c_ptr).to_string_lossy();
    }
    println!("c_str is    {}", c_str);

c_str is thanksfish

原始指针和unsafe块配合,可以避过引用借用保护,但也失去了rust的优势。rust严谨也足够灵活...,除非必要原始指针慎用,用多了又变成c了...

相关推荐
小喷友2 小时前
阶段三:进阶(Rust 高级特性)
前端·rust
Python私教3 小时前
源滚滚Rust全栈班v1.02 无符号整数详解
开发语言·后端·rust
专注VB编程开发20年17 小时前
CSS 的命名方式像是 PowerShell 的动词-名词结构,缺乏面向对象的层级关系
开发语言·后端·rust
伍哥的传说18 小时前
Tailwind CSS v4 终极指南:体验 Rust 驱动的闪电般性能与现代化 CSS 工作流
前端·css·rust·tailwindcss·tailwind css v4·lightning css·utility-first
专注VB编程开发20年21 小时前
rust语言-对象多级访问
服务器·前端·rust
编码浪子1 天前
趣味学RUST基础篇(构建一个命令行程序2重构)
开发语言·重构·rust
susnm1 天前
组件生命周期
rust·全栈
bruce541101 天前
Axum 最佳实践:如何构建优雅的 Rust 错误处理系统?(三)
rust
Source.Liu2 天前
【Python基础】 15 Rust 与 Python 基本类型对比笔记
笔记·python·rust
咸甜适中2 天前
rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(二十六)windows平台运行时隐藏控制台
笔记·学习·rust·egui