C組合
組合は、メモリに格納されたデータの同じタイプの別の場所にあなたを可能にする、データの特殊なタイプです。あなたはより多くのメンバーと共用体を定義することができますが、任意の時間が値を持つ複数のメンバーが存在することができます。 組合は、効果的な方法で同じメモリ位置を使用する方法を提供します。
労働組合の定義
労働組合を定義するには、労働組合の文を使用し、同様の方法で構造を定義する必要があります。union文は、複数の部材と、新しいデータ型を定義します。 次のようにUNION文の形式は次のとおりです。
union [union tag] { member definition; member definition; ... member definition; } [one or more union variables];
組合タグはオプションで、すべてのメンバーの定義には、私intとして変数の標準的な定義である;またはfをフロート;または他の有効な変数の定義。共通のボディに定義最後のセミコロンの終了前に、任意である労働組合変数、1つまたは複数指定することができます。 データという名前の共通のボディタイプの以下の定義は、I、Fとstr 3メンバーがあります。
union Data { int i; float f; char str[20]; } data;
今、変数のデータ型は、整数、浮動小数点、または文字列を格納することができます。 この変数(同じメモリ位置)は、各種のデータを複数格納することができることを意味します。 必要に応じて、共通のボディに任意の組み込みまたはユーザー定義のデータ型を使用することができます。
組合は組合の最大のメンバーによって占められる十分な記憶メモリでなければなりません。 例えば、上記の例では、データは、メモリ空間の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
アクセス組合員
共通の加盟国にアクセスするために、我々は、メンバーアクセス演算子を使用します(。)。メンバーアクセス演算子は、間にアクセスされる期間変数名と私たちの組合の組合員です。 あなたは、変数のユニオンユニオンタイプを定義するためにキーワードを使用することができます。 次の例では、労働組合の使用を示しています。
#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
値はそのまま出力する理由strのメンバーである最後の占有メモリ位置の変数に割り当てられているのでここでは、破損しているiとF組合メンバーの値を見ることができます。 今度は1と同じインスタンスを見てみましょう、我々は同時に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
ここでは、すべてのメンバーがそのまま出力することができ、同時に複数のメンバーを使用しているため。