C言語連合体(共用体)


union共通体名{メンバーリスト};
共用体は連合や連合体と呼ばれることもありますが、これもユニオンという単語の本意です.構造体と共通体の違いは、構造体の各メンバーが異なるメモリを占有し、互いに影響を及ぼさないことです.一方、共通体のすべてのメンバーは同じメモリを占有し、1つのメンバーを変更すると残りのすべてのメンバーに影響します.
構造体が使用するメモリは、すべてのメンバーが使用するメモリの合計(メンバー間に隙間がある可能性がある)よりも大きく、共通体が使用するメモリは、最も長いメンバーが使用するメモリに等しい.共通体はメモリオーバーライドテクノロジーを使用しており、同じ時点で1つのメンバーの値しか保存できません.新しいメンバーに値を割り当てると、元のメンバーの値がオーバーライドされます.
共通体もカスタムタイプで、union data{int n;char ch;double f;}などの変数を作成できます.union data a, b, c; 共通体を定義してから変数を作成するか、共通体を定義しながら変数を作成することもできます:union data{int n;char ch;double f;}a, b, c; 新しい変数を定義しなくなった場合は、共通体の名前を省略することもできます:union{int n;char ch;double f;}a, b, c; 共通体dataでは、メンバーfが最も多く8バイトのメモリを占有するため、dataタイプの変数(すなわちa、b、c)も8バイトのメモリを占有する.int main(){ union data a; printf("%d, %d", sizeof(a), sizeof(union data) ); a.n = 0x40; printf("%X, %c, %hX", a.n, a.ch, a.m); a.ch = ‘9’; printf("%X, %c, %hX", a.n, a.ch, a.m); a.m = 0x2059; printf("%X, %c, %hX", a.n, a.ch, a.m); a.n = 0x3E25AD54; printf("%X, %c, %hX", a.n, a.ch, a.m);
return 0;

}運転結果:4,4 40,@,40 39,9,39,2059,Y,2059 3 E 25 AD 54,T,AD 54
この文章はネットに貼り付けてある