一、前言
看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.如何稱呼,還真是一個小問題,稱為"一存多表"類型吧