C - 組合
組合 C で使用できる特別なデータ型で、同じメモリ位置に異なるデータ型を格納できます。多数のメンバーを持つ共用体を定義できますが、一度に値を含むことができるのは 1 つのメンバーだけです。ユニオンは、同じメモリ位置を多目的に使用する効率的な方法を提供します。
ユニオンの定義
ユニオンを定義するには、ユニオンを使用する必要があります 構造体を定義するときと同じ方法でステートメントを作成します。 union ステートメントは、プログラムの複数のメンバーを持つ新しいデータ型を定義します。ユニオンステートメントの形式は次のとおりです-
union [union tag] { member definition; member definition; ... member definition; } [one or more union variables];
ユニオンタグ オプションであり、各メンバー定義は int i などの通常の変数定義です。またはフロート f;またはその他の有効な変数定義。ユニオンの定義の最後、最後のセミコロンの前に、1 つ以上のユニオン変数を指定できますが、これはオプションです。以下は、i、f、および str の 3 つのメンバーを持つ Data という名前の共用体型を定義する方法です −
union Data { int i; float f; char str[20]; } data;
さて、Data の変数 type には、整数、浮動小数点数、または文字列を格納できます。これは、単一の変数、つまり同じメモリ位置を使用して、複数のタイプのデータを格納できることを意味します。要件に基づいて、ユニオン内で任意の組み込みまたはユーザー定義のデータ型を使用できます。
共用体が占有するメモリは、共用体の最大のメンバーを保持するのに十分な大きさになります。たとえば、上記の例では、データ型は 20 バイトのメモリ空間を占有します。これは、文字列が占有できる最大空間であるためです。次の例は、上記のユニオンが占有する合計メモリ サイズを表示します −
ライブデモ#include <stdio.h> #include <string.h> union Data { int i; float f; char str[20]; }; int main( ) { union Data data; printf( "Memory size occupied by data : %d\n", sizeof(data)); return 0; }
上記のコードをコンパイルして実行すると、次の結果が生成されます −
Memory size occupied by data : 20
組合員へのアクセス
ユニオンの任意のメンバーにアクセスするには、メンバー アクセス演算子 (.) を使用します。 .メンバー アクセス演算子は、ユニオン変数名とアクセスするユニオン メンバーの間のピリオドとしてコーディングされます。キーワード union を使用します 共用体型の変数を定義します。次の例は、プログラムで共用体を使用する方法を示しています −
ライブデモ#include <stdio.h> #include <string.h> union Data { int i; float f; char str[20]; }; int main( ) { union Data data; data.i = 10; data.f = 220.5; strcpy( data.str, "C Programming"); printf( "data.i : %d\n", data.i); printf( "data.f : %f\n", data.f); printf( "data.str : %s\n", data.str); return 0; }
上記のコードをコンパイルして実行すると、次の結果が生成されます −
data.i : 1917853763 data.f : 4122360580327794860452759994368.000000 data.str : C Programming
ここで、 i の値が そしてf 変数に割り当てられた最終値がメモリ位置を占有したため、共用体のメンバーが破損しました。これが str の値が メンバーは非常にうまく印刷されています.
ここで、ユニオンを持つ主な目的である一度に1つの変数を使用する同じ例をもう一度見てみましょう-
ライブデモ#include <stdio.h> #include <string.h> union Data { int i; float f; char str[20]; }; int main( ) { union Data data; data.i = 10; printf( "data.i : %d\n", data.i); data.f = 220.5; printf( "data.f : %f\n", data.f); strcpy( data.str, "C Programming"); printf( "data.str : %s\n", data.str); return 0; }
上記のコードをコンパイルして実行すると、次の結果が生成されます −
data.i : 10 data.f : 220.500000 data.str : C Programming
ここでは、一度に 1 つのメンバーが使用されているため、すべてのメンバーが非常にうまく印刷されています。
C言語