組合の定義
共用体を定義するには、構造体の定義時と同じ方法で共用体文を使用する必要があります。 unionステートメントは、プログラムに複数のメンバーを持つ新しいデータ型を定義します。 union文の書式は次のとおりです
union [union tag] { member definition; member definition; ... member definition; } [one or more union variables];共用体タグはオプションで、各メンバ定義はint iなどの通常の変数定義です。 またはフロートf。 またはその他の有効な変数定義を使用します。 ユニオンの定義の最後で、最後のセミコロンの前に、1つ以上の共用体変数を指定できますが、オプションです。 ここでは、3つのメンバーi、f、およびstrを持つDataという名前の共用体タイプを定義する方法を示します
union Data { int i; float f; char str[20]; } data;これで、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
ユニオンメンバーへのアクセス
共用体のメンバーにアクセスするには、メンバーアクセス演算子(。)を使用します。 メンバーアクセス演算子は、アクセスしたいユニオン変数名とユニオンメンバーの間のピリオドとしてコード化されています。 Union型の変数を定義するには、キーワード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人のメンバーが使用されているため、すべてのメンバーが非常にうまく印刷されています。
No comments:
Post a Comment