構造体は、同じメモリ位置に異なるデータ型を格納するデータ型です。
構造体の合計メモリサイズは、そのすべてのメンバのメモリサイズの合計になります。
これに対して、Unionは異なるデータ型を同じメモリ位置に格納するデータ型で、総メモリサイズはその最大要素のメモリサイズに依存する。
一方、Enumは、積分定数を格納するデータ型です。
これがC言語の構造体ユニオンとエニュームの主な違いです。
プログラミングでは、変数は1つのデータ型の値を格納することができる。
時には、異なる型の変数を1つの単位として格納することが必要です。
異なる型の複数の変数を1つの変数として格納する方法として、構造体とユニオンがあります。
一方、enumは名前付き定数の集合を宣言するためのデータ型です。
これらはすべてユーザ定義データ型です。
構造とは
構造体とは、複数の型のデータを格納できる1つの変数のことです。
異種のデータ型を持つ変数の集合です。
構造体の例は次のとおりです。
図1:C言語における構造体
上のプログラムによると、complexという構造体は、realが複素数の実部を表し、imgが複素数の虚部を表すという2つの性質を含んでいることがわかる。
メインプログラムでは、10行目でc1、c2という2つの構造体型の変数を宣言している。
11行目から14行目までは、c1, c2それぞれのreal, imgに値を与えています。
15行目では、変数rにc1とc2の実数値の和が格納されています。
同様に、16行目では、iという変数にc1とc2のimg値の合計が格納されている。
最後に、複素数の総和がコンソールに表示される。
ユニオンとは
ユニオンは、様々なデータ型を同じメモリに格納することができます。
例えば、Employeeは名前、給料、都市などのプロパティを持つことができます。
それぞれの変数を作成する代わりに、ユニオンを使用することができます。
これは、すべての異なるデータ型を1つのユニットにコンパクト化するものです。
2点p1とp2間の距離は次のようになる。
距離 = (p2.a – p1.a) 2 + (p2.b – p1.b) 2
上記のプログラムによると、Pointはunionです。
メインプログラムでは、distance, t1, t2 は float 型の変数、p1, p2 は union 型の変数です。
12行目から15行目までは、p1のa,bとp2のa,bに値を与えています。
18行目では、変数distanceは点p1とp2間の距離を格納します。
最後に、コンソールに答えが表示されます。
ユニオンとストラクチャーは非常によく似ていますが、違いがあります。
ユニオンでは、ユニオンを格納するのに必要な総メモリは、そのユニオンの中で最大の要素のメモリとなります。
例えば、あるユニオンにname、salary、idの3つのプロパティがあるとする。
nameは32バイト、salaryとidはそれぞれ4バイトを必要とする。
最大は32バイトであり、組合のメモリ割り当ては32バイトです。
Enumとは
Enumはenumeration(列挙)の略です。
積分定数で構成されるユーザー定義のデータ型です。
例として以下のようなものがあります。
図3:C言語のEnum
週はenumです。
デフォルトでは、日曜日は値0、月曜日は値1、火曜日は値2、などとなっている。
メインプログラムでは,todayはweek型のenumです。
金曜日が代入されています。
次の日は土曜日で、定数6を持つ。
したがって、コンソールには「6日目」という出力が表示される。
例えば、プログラマが以下のようにenumを宣言したとする。
enum week { sunday=1, monday, tuesday, wednesday, thursday, friday, saturday };
すると、メインプログラムでは、「7日目」と出力される。
Cにおける構造体ユニオンとEnumの違い
定義
構造体は、同じメモリ位置に異なるデータ型を格納するデータ型で、構造体の総メモリ サイズは、すべてのメンバーのメモリサイズの合計です。
これに対して、Unionは、異なるデータ型を同じメモリ位置に格納するデータ型で、その総メモリ サイズは最大要素のメモリサイズに依存する。
EnumはC言語のデータ型で、名前付き定数の集合を宣言するための値型を表す。
これらの定義は、C言語における構造体結合とenumの基本的な違いを概説しています。
キーワード
Structureを宣言するキーワードは’struct’、Unionを宣言するキーワードは’union’、Enumを宣言するキーワードは’enum’です。
使用方法
C言語の構造体unionとenumは、その使い方にも違いがあります。
構造体と和集合は、異なる型のデータを一つの単位として保存するのに役立ち、enumは、定数を一連の名前に割り当てて、プログラムを読みやすく、保守しやすく、理解しやすくするのに役立ちます。
結論
構造体は、異なるデータ型を同じメモリ位置に格納するデータ型です。
構造体の総メモリサイズは、そのすべてのメンバーのメモリサイズの合計です。
これに対して、Unionは、異なるデータ型を同じメモリ位置に格納するデータ型で、総メモリサイズは最大要素のメモリサイズに依存します。
一方、Enumは、積分定数を格納するデータ型です。
したがって、これがC言語の構造体ユニオンとエニュームの主な違いです。