struct MyStruct {
int type;
union {
int intValue;
float floatValue;
char stringValue[20];
} data;
};
上記の例では、MyStruct
という構造体を定義し、type
とdata
という2つのメンバーを持たせています。data
メンバーは共用体であり、intValue
(整数型)、floatValue
(浮動小数点型)、stringValue
(文字列型)の3つの異なるメンバーを持っています。
共用体のメンバーは、同じメモリ領域を共有するため、一度に1つのメンバーしか使用できません。例えば、次のように共用体のメンバーに値を代入することができます:
struct MyStruct myStruct;
myStruct.type = 1;
myStruct.data.intValue = 10;
上記の例では、myStruct
のtype
メンバーには1が代入され、data
メンバーのintValue
には10が代入されています。
共用体の使い方は多岐にわたります。例えば、データの種類を表すtype
メンバーを使用して、異なる型のデータを格納することができます。また、共用体を配列やポインタと組み合わせることもできます。
以下に、共用体を使用するさまざまな方法とコード例を示します:
- データの種類ごとに処理を分岐する例:
if (myStruct.type == 1) {
// intValueを使用する処理
int value = myStruct.data.intValue;
// ...
} else if (myStruct.type == 2) {
// floatValueを使用する処理
float value = myStruct.data.floatValue;
// ...
} else if (myStruct.type == 3) {
// stringValueを使用する処理
char* value = myStruct.data.stringValue;
// ...
}
- 共用体を配列と組み合わせる例:
struct MyStructArray {
int count;
struct MyStruct elements[10];
};
struct MyStructArray myArray;
myArray.count = 3;
myArray.elements[0].type = 1;
myArray.elements[0].data.intValue = 10;
// ...
上記の例では、MyStruct
の配列を持つMyStructArray
という構造体を定義しています。
共用体を使用することで、異なる型のデータを効率的に扱うことができます。ただし、注意が必要であり、共用体のメンバーにアクセスする際には、正しい型を使用してアクセスするようにする必要があります。
以上が、C言語における構造体内の共用体の使用方法といくつかのコード例です。