Cprogramming-c-unions
C-組合
組合の定義
ユニオンを定義するには、構造の定義中と同じ方法で union ステートメントを使用する必要があります。 共用体ステートメントは、プログラムの複数のメンバーを持つ新しいデータ型を定義します。 ユニオン文の形式は次のとおりです-
- unionタグ*はオプションであり、各メンバー定義はint iなどの通常の変数定義です。またはfloat f;または他の有効な変数定義。 ユニオンの定義の最後で、最後のセミコロンの前に、1つ以上のユニオン変数を指定できますが、これはオプションです。 ここに、3つのメンバーi、f、およびstrを持つDataという名前のユニオン型を定義する方法があります-
現在、 Data 型の変数は、整数、浮動小数点数、または文字列を格納できます。 これは、単一の変数、つまり同じメモリ位置を使用して、複数のタイプのデータを保存できることを意味します。 要件に基づいて、ユニオン内で組み込みまたはユーザー定義のデータ型を使用できます。
ユニオンが占有するメモリは、ユニオンの最大メンバーを保持するのに十分な大きさになります。 たとえば、上記の例では、データ型は20バイトのメモリ空間を占有します。これは、これが文字列で占有できる最大の空間だからです。 次の例は、上記のユニオンが占有する合計メモリサイズを表示します-
上記のコードをコンパイルして実行すると、次の結果が生成されます-
組合員へのアクセス
組合のメンバーにアクセスするには、* memberアクセス演算子(。)を使用します。 メンバーアクセス演算子は、ユニオン変数名とアクセスするユニオンメンバー間のピリオドとしてコーディングされます。 キーワード *union を使用して、ユニオン型の変数を定義します。 次の例は、プログラムでユニオンを使用する方法を示しています-
上記のコードをコンパイルして実行すると、次の結果が生成されます-
ここでは、変数に割り当てられた最終値がメモリ位置を占有しているため、ユニオンの i および f メンバーの値が破損していることがわかります。これが str メンバーの値が出力される理由です。結構。
さて、同じ例をもう一度見てみましょう。ここでは、ユニオンを持つ主な目的である一度に1つの変数を使用します-
上記のコードをコンパイルして実行すると、次の結果が生成されます-
ここでは、一度に1つのメンバーが使用されているため、すべてのメンバーが非常にうまく印刷されています。