*C言語* 〜43時限目〜 共用体型の仕組みについて・・・
〜目次〜
共用体型の仕組みについて
新しい型について学んでいきます。
共用体型(union type)
と呼ばれる型は、
構造体型と似たかたちを持っています。
共用体型の宣言は以下の通りです。
union 共用体型名{
型名 識別子;
型名 識別子;
・・・
};
共用体型は、構造体型のstructの代わりに、
union
というキーワードを使います。
共用体型も、
共用体型の変数を用意することで、
値を格納することができます。
ただし、
共用体型の各メンバは、
同時に値を記憶できるのではなく、
全体で1つしか値を記憶することができない
という特徴を持っています。
実際に以下のコードを入力してみてください。
sample99.c
ーsample99の実行画面ー
西暦を入力してください。
2018
西暦は2018です。
元号は2018です。
元号を入力してください。
30
元号は30です。
西暦は30です。
実行画面からわかる通り、
共用体のメンバは、
同時に別の値を記憶することができない
ということが確認できます。
あるメンバの値を変更すると、
他のメンバの値も同じものに変更されます。
共用体のメンバは全てメモリの同じ位置に、
値を格納することになっています。
共用体は限られたメモリを節約するために使われる型になっています。
列挙型の仕組みについて
また、新しい型として、
列挙型(enumerated type)
という型について学んでいきます。
列挙型の宣言の仕方は以下の通りです。
enum 列挙名 {識別子1, 識別子2, 識別子3,・・・};
列挙型は識別子を値として格納できる型のことです。
例えば1週間を列挙型にすると以下の通りです。
enum Week{SUN, MON, TUE, WED, THU, FRI, SAT};
実際に列挙型を使ったコードを入力してみます。
sample100.c
ーsample100の実行画面ー
月曜です。
sample100はwの値によって異なる出力をします。
列挙型の値は識別子なので、
読みやすコードを記述することができます。
列挙型の数値を指定する
列挙型は識別子の値を格納できるが、
内部的には順に0から1つずつ増える整数の値が、
割り振られて扱われる仕組みになっています。
なので、
sample100のcaseの横は0からの整数に変えても、
問題なくプログラムが実行されます。
ただし、
識別子を使って値を記述した方が、
わかりやすいコードが作成できるので、
列挙型の長所を十分に使うことができるでしょう。
尚、列挙型を宣言する際には、
割り振られる整数値を変えることもできます。
コードによっては、
この整数値を自分で指定する方が便利な場合があります。
宣言をするときに代入演算子を使って数値を指定します。
列挙型が示す数値は、
重複があっても大丈夫です。
指定しな部分では、原則どおり1つずつ増えます。
列挙型とマクロを比較する
マクロとを使っても同じように数値を、
わかりやすい名前で置き換えることができました。
#define SUN 0
#define MON 1
・・・
これは列挙型と同じ働きを持っています。
しかし、
何か意味のあるまとまった数値を複数扱う場合には、
列挙型を使った方がコードが読みやすくなります。
〜END〜