一、前言
看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.怎样称呼,还真是一个小问题,称为"一存多表"范例吧
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |