网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > Rust >

rust学习二十.4、RUST使用不安全代码访问union(一存

时间:2025-03-14 17:48

人气:

作者:admin

标签:

导读:一、前言 看UNION的定义,颇为惊讶,居然有这样的类型(以前没有怎么用过C)。 以下一段来自于文心一言: 1.定义和用途union允许在相同的内存位置存储不同类型的数据,但在任意时刻只...

一、前言

看UNION的定义,颇为惊讶,居然有这样的类型(以前没有怎么用过C)。

以下一段来自于文心一言:

1.定义和用途
union允许在相同的内存位置存储不同类型的数据,但在任意时刻只能使用其中一个类型。
适用于需要在节省内存的情况下灵活存储不同类型数据的场景。
2.内存布局
所有字段共享相同的内存位置。
这意味着union的大小由其最大字段决定。

3.安全性与用法
由于在同一内存位置存储不同类型,使用时需要特别注意,确保每次只访问当前的有效类型。
需要使用unsafe块来读取或写入union的字段,因为Rust无法保证类型安全。

本人看法

其一、叫联合好像不容易理解,不如称为 "一容各表"、“一存多表"之类的,类似于“一x各表”

其二、比较难于理解这个类型的存在,毕竟类似的业务代码没有写过

二、示例

union Uscore {
    a: u32,
    b: f32,
}

union Ucode {
    a: u8,
    b: char,
}

fn main() {
    let mut u = Uscore { a: 10 };
    unsafe {
        println!("{}", u.b); // 输出:0
        u.b = 20.0;
        println!("{}", u.a); // 输出:20
    }

    println!("---- 现在测试另外一个union类型 ---- ");
    let x: u8 = 87;
    let mut u2 = Ucode { a: x };
    unsafe {
        println!("a={},b={}", u2.a, u2.b);
        u2.b = 'W';
        println!("a={},b={}", u2.a, u2.b);
    }
}

输入如下:

三、小结

知道的非常少,说几点个人感受深的:

1.居然有这种类型,看来rust是要挑战c

2.需要用不安全代码块访问

3.如何称呼,还真是一个小问题,称为"一存多表"类型吧

 

本文来自博客园,作者:正在战斗中,转载请注明原文链接:https://www.cnblogs.com/lzfhope/p/18772548

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信