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

打印 上一主题 下一主题

主题 1015|帖子 1015|积分 3045

一、前言

看UNION的定义,颇为惊奇,居然有这样的范例(以前没有怎么用过C)。
以下一段来自于文心一言:
1.定义和用途
union允许在雷同的内存位置存储不同范例的数据,但在任意时刻只能使用此中一个范例。
适用于需要在节省内存的环境下机动存储不同范例数据的场景。
2.内存布局
所有字段共享雷同的内存位置。
这意味着union的大小由其最大字段决定。
3.安全性与用法
由于在同一内存位置存储不同范例,使用时需要特别注意,确保每次只访问当前的有效范例。
需要使用unsafe块来读取或写入union的字段,因为Rust无法保证范例安全。
本人看法
其一、叫团结好像不容易明白,不如称为 "一容各表"、“一存多表"之类的,类似于“一x各表”
其二、比力难于明白这个范例的存在,毕竟类似的业务代码没有写过
二、示例
  1. union Uscore {
  2.     a: u32,
  3.     b: f32,
  4. }
  5. union Ucode {
  6.     a: u8,
  7.     b: char,
  8. }
  9. fn main() {
  10.     let mut u = Uscore { a: 10 };
  11.     unsafe {
  12.         println!("{}", u.b); // 输出:0
  13.         u.b = 20.0;
  14.         println!("{}", u.a); // 输出:20
  15.     }
  16.     println!("---- 现在测试另外一个union类型 ---- ");
  17.     let x: u8 = 87;
  18.     let mut u2 = Ucode { a: x };
  19.     unsafe {
  20.         println!("a={},b={}", u2.a, u2.b);
  21.         u2.b = 'W';
  22.         println!("a={},b={}", u2.a, u2.b);
  23.     }
  24. }
复制代码
输入如下:

三、小结

知道的非常少,说几点个人感受深的:
1.居然有这种范例,看来rust是要挑衅c
2.需要用不安全代码块访问
3.怎样称呼,还真是一个小问题,称为"一存多表"范例吧
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

傲渊山岳

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表