一、前言
看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.如何称呼,还真是一个小问题,称为"一存多表"类型吧
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |