C言語におけるStructure UnionとEnumの違いとは?分かりやすく解説!

この記事には、アフィリエイト広告を利用しています。

スポンサーリンク

構造体は、同じメモリ位置に異なるデータ型を格納するデータ型です。

構造体の合計メモリサイズは、そのすべてのメンバのメモリサイズの合計になります。

これに対して、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言語の構造体ユニオンとエニュームの主な違いです。

タイトルとURLをコピーしました