union用法

流水江湖發表於2024-04-21

共用體(Union)是C語言中的一種特殊資料型別,它允許在相同的記憶體空間中儲存不同型別的資料

1、定義共用體:
共用體的定義與結構體類似,使用 union 關鍵字,後跟共用體的名稱和成員變數列表。共用體的成員變數可以是不同的資料型別,但它們共享同一塊記憶體空間。

union MyUnion {
    int i;
    float f;
    char c;
};

在上述示例中,我們定義了一個名為 MyUnion 的共用體,它包含了一個整型變數 i、一個浮點型變數 f 和一個字元型變數 c。

2、使用共用體:
可以透過共用體的名稱和成員變數名來訪問共用體的成員變數。由於共用體的成員變數共享同一塊記憶體空間,只能同時儲存其中一個成員變數的值。

union MyUnion u;
u.i = 10;
printf("Value of i: %d\n", u.i);
u.f = 3.14;
printf("Value of f: %.2f\n", u.f);

在上述示例中,我們宣告瞭一個 MyUnion 型別的變數 u,並分別給 u.i 和 u.f 賦值。由於它們共享同一塊記憶體空間,改變其中一個成員變數的值會影響到其他成員變數。

3、共用體的大小:
共用體的大小是其最大成員變數的大小。因為共用體的成員變數共享同一塊記憶體空間,所以共用體的大小足夠容納最大的成員變數即可。

使用 sizeof 運算子可以獲取共用體的大小。

需要注意的是,共用體雖然靈活,但也存在潛在的問題。由於共用體的成員變數共享同一塊記憶體空間,因此在使用共用體時需要小心,確保對成員變數的訪問和修改是合法的。此外,共用體的使用也可能導致型別轉換和記憶體對齊等問題,因此在使用共用體時需要謹慎考慮。

下面是一個完整的示例程式碼,演示了共用體的定義和使用:

#include <stdio.h>
 
union MyUnion {
    int i;
    float f;
    char c;
};
 
int main() {
    union MyUnion u;
 
    u.i = 10;
    printf("Value of i: %d\n", u.i);
 
    u.f = 3.14;
    printf("Value of f: %.2f\n", u.f);
 
    printf("Size of union MyUnion: %zu\n", sizeof(union MyUnion));
 
    return 0;
}

輸出結果:

Value of i: 10
Value of f: 3.14
Size of union MyUnion: 4

根據輸出結果可知,共用體 MyUnion 的大小是4位元組,因為 int 型別的大小為4位元組,是共用體中最大的成員變數。

總結一下,共用體是C語言中一種特殊的資料型別,允許在相同的記憶體空間中儲存不同型別的資料。它的定義和使用方式與結構體類似,但共用體的成員變數共享同一塊記憶體空間。

需要注意共用體的大小、成員變數的訪問和修改,以及潛在的型別轉換和記憶體對齊問題。

原文連結:https://blog.csdn.net/m0_74293254/article/details/134054841

相關文章