C言語を学んでいると、「ユニオン(union)」というキーワードに出会うことがあります。構造体と似ているようで異なるこのデータ型は、メモリ効率や柔軟なデータ管理が求められる場面で特に威力を発揮します。しかし、使い方や注意点を正しく理解していないと、思わぬバグやトラブルの原因になることも少なくありません。この記事では、C言語のユニオンについて基礎から応用例、注意点までをわかりやすく解説します。
**ユニオン(union)**は、C言語におけるデータ型の一つで、複数の異なる型のデータを「同じメモリ領域」に格納できる特徴を持っています。構造体(struct)と似た宣言方法ですが、全メンバが同じメモリ領域を共有する点が大きな違いです。
union Example {
int integer;
float decimal;
char character;
};
この例では、integer
・decimal
・character
の3つのメンバが同じメモリ領域を共有します。ユニオンのサイズは、メンバの中で最も大きい型のサイズになります。
union Data {
int i;
double f;
char str[20];
};
union Data data;
data.i = 10;
printf("data.i = %d\n", data.i);
data.f = 3.14;
printf("data.f = %.2f\n", data.f);
strcpy(data.str, "Hello");
printf("data.str = %s\n", data.str);
enum DataType { INT, DOUBLE, STRING };
struct Data {
enum DataType type;
union {
int i;
double f;
char str[20];
};
};
このように、どの型のデータが有効かをenumで管理することで、安全にユニオンを活用できます。
C言語でメモリ効率や柔軟なデータ表現が求められる場面では、ユニオンの活用を検討してみてください。
手頃なサイズでかわいいサイドバ…