动态

详情 返回 返回

rust學習二十.4、RUST使用不安全代碼訪問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.如何稱呼,還真是一個小問題,稱為"一存多表"類型吧

 

Add a new 评论

Some HTML is okay.