Cユニオンズ
C ユニオン
このチュートリアルでは、C プログラミングにおける共用体について学習します。より具体的には、ユニオンを作成し、そのメンバーにアクセスし、ユニオンと構造の違いを学ぶ方法.
共用体は、1 つの重要な違いを除いて、C の構造体に似たユーザー定義型です。
構造体はすべてのメンバーを格納するのに十分なスペースを割り当てますが、共用体は一度に 1 つのメンバー値しか保持できません .
ユニオンを定義する方法
union
を使用します ユニオンを定義するキーワード。以下に例を示します:
union car
{
char name[50];
int price;
};
上記のコードは、派生型 union car
を定義しています .
ユニオン変数を作成
共用体が定義されると、ユーザー定義型が作成されます。ただし、メモリは割り当てられません。特定のユニオン タイプにメモリを割り当てて操作するには、変数を作成する必要があります。
ユニオン変数を作成する方法は次のとおりです。
union car
{
char name[50];
int price;
};
int main()
{
union car car1, car2, *car3;
return 0;
}
ユニオン変数を作成する別の方法:
union car
{
char name[50];
int price;
} car1, car2, *car3;
どちらの場合も、ユニオン変数 car1 , car2 、および共用体ポインター car3 union car
の タイプが作成されます。
ユニオンのメンバーにアクセス
.
を使用します ユニオンのメンバーにアクセスする演算子。ポインタ変数にアクセスするには、 ->
を使用します
上記の例では、
- 価格にアクセスするには
car1
の場合 、car1.price
- 価格にアクセスするには
car3
を使用 、いずれか(*car3).price
またはcar3->price
使用できます。
共用体と構造体の違い
ユニオンと構造体の違いを示す例を見てみましょう:
#include <stdio.h>
union unionJob
{
//defining a union
char name[32];
float salary;
int workerNo;
} uJob;
struct structJob
{
char name[32];
float salary;
int workerNo;
} sJob;
int main()
{
printf("size of union = %d bytes", sizeof(uJob));
printf("\nsize of structure = %d bytes", sizeof(sJob));
return 0;
}
出力
size of union = 32 size of structure = 40
共用体変数と構造体変数のサイズの違いはなぜですか?
ここで、sJob のサイズ は 40 バイトです
name[32]
のサイズ は 32 バイトですsalary
のサイズ は 4 バイトですworkerNo
のサイズ は 4 バイトです
ただし、uJob のサイズは は 32 バイトです。これは、ユニオン変数のサイズが常にその最大要素のサイズになるためです。上記の例では、その最大要素のサイズ (name[32]
)、32 バイトです。
組合では、すべてのメンバーが同じ記憶を共有します .
例:組合員へのアクセス
#include <stdio.h>
union Job {
float salary;
int workerNo;
} j;
int main() {
j.salary = 12.3;
// when j.workerNo is assigned a value,
// j.salary will no longer hold 12.3
j.workerNo = 100;
printf("Salary = %.1f\n", j.salary);
printf("Number of workers = %d", j.workerNo);
return 0;
}
出力
Salary = 0.0 Number of workers = 100
共用体がどこで使用されているかについては、なぜ C 共用体が必要なのかをご覧ください。
C言語