実は😝列挙体の文字定数には数値が割り振られています
アレサ 「実は
Fruitsの列挙体宣言
typedef enum Fruits{Orange, Apple, Lemon }Fruits;
を行うと
Fruitsの列挙体宣言の{}内の
左のOrangeから順に数値0,1,2・・・
と番号が割り振られていきます。
試しに
Fruitsの列挙体宣言
typedef enum Fruits{Orange, Apple, Lemon }Fruits;
を行い
Orangeを%d出力変換指定子をつかって
printf出力表示すると
#include<stdio.h>
typedef enum Fruits{Orange, Apple, Lemon }Fruits;
int main(void){
printf("%d",Orange);
return 0;
}
コンパイル結果
0
が表示されます。
もう1つ試してみますね。
今度は
int型のaの変数宣言を行って
変数aを作製したように
列挙体Fruits型のfruitsの列挙体変数宣言を行い
列挙体変数fruitsを作製して
列挙体変数fruitsに文字定数Lemonを
代入して
列挙体変数fruitsに格納された文字定数Lemonを
%d出力変換指定子をつかってprintf出力表示すると
#include<stdio.h>
typedef enum Fruits{Orange, Apple, Lemon }Fruits;
int main(void){
Fruits fruits;
fruits=Lemon ;
printf("%d", fruits);
return 0;
}
コンパイル結果
2
コンパイル結果は
2が表示され
文字定数Lemonに数値2が割り振られているのが
わかります。
つまり
Orange=0
Apple=1
Lemon=2
と文字定数に数値が割り当てられており
今までのプログラムで
Orange
Apple
Lemon
と記述された箇所は
すべて
数値
0
1
2
に変更可能です。
先のエピソードのプログラム⇩
#include<stdio.h>
typedef enum Fruits{Orange, Apple, Lemon }Fruits;
int main(void){
Fruits fruits;
fruits=Lemon ;
switch(fruits){
case Orange: printf("オレンジ色です。\n");break;
case Apple: printf("りんご色です。\n");break;
case Lemon: printf("レモン色です。\n");break;
}
return 0;
}
の
Orange
Apple
Lemon
と記述された箇所を
以下のプログラムのように
数値
0
1
2
に変更可能なのですね。
#include<stdio.h>
typedef enum Fruits{Orange, Apple, Lemon }Fruits;
int main(void){
Fruits fruits;
fruits=2 ;
switch(fruits){
case 0: printf("オレンジ色です。\n");break;
case 1: printf("りんご色です。\n");break;
case 2: printf("レモン色です。\n");break;
}
return 0;
}
」
ソーラー「はうぅ・・・」
アレサ「どうかされましたの? ソーラーさん😊」
ソーラー「はっ いやあ、ここまできたんだなあっと
ちょっと感慨に耽っていたよ・・・
この
文字定数
Orange
Apple
Lemon
を
数値
0
1
2
に変更したプログラムでは
文字定数Lemonをつかったときのような
「Lemon」を代入したら
コンパイル結果
レモン色です
のようなわかりやすさがないかな。
というより
この変更されたプログラムを よくみると
文字定数Orange, Apple, Lemonが使われてなくて
列挙体宣言をおこない
文字定数
Orange
Apple
Lemon
を
作製する意味が
”
のがミソだね。」
アレサ「そうなんです。
作製した文字定数はうまくつかってくださいね」
アレサ「また
先程のFruitsの列挙体宣言では
typedef enum Fruits{Orange, Apple, Lemon }Fruits;
{}内の
左のOrangeから順に数値0,1,2・・・
と自動的に番号が割り振られていましたが
列挙体宣言で格納された文字には自由に
番号を割り振ることができます
表記方法は
例)
typedef enum Fruits{Orange=7, Apple=0, Lemon =1}Fruits;
のようになります。
プログラムを構成してみると
#include<stdio.h>
typedef enum Fruits{Orange=7, Apple=0, Lemon =1}Fruits;
int main(void){
Fruits fruits;
fruits=Lemon;
switch(fruits){
case 7: printf("オレンジ色です。\n");break;
case 0: printf("りんご色です。\n");break;
case 1: printf("レモン色です。\n");break;
}
return 0;
}
コンパイル結果
レモン色です
となり
Lemonに割り振られている数値が1に変更されているのが
わかります。
また
この↓の列挙体宣言のように
typedef enum Fruits{Orange=7, Apple, Lemon }Fruits;
文字定数
Orangeにだけ
Orange=7に
変更を行うと
その次の
文字定数
Apple
Lemon
には
8
9
と順番に
1ずつ数値が増加しながら割り振られていきます。
以下のように
typedef enum Fruits{Orange=7, Apple, Lemon }Fruits;
を
プログラムに組み込んでみると
#include<stdio.h>
typedef enum Fruits{Orange=7, Apple, Lemon }Fruits;
int main(void){
printf("%d\n",Orange);
printf("%d\n", Apple);
printf("%d\n", Lemon);
return 0;
}
コンパイル結果
7
8
9
となり
Orange=7
Apple=8
Lemon=9
と数値が割り振られているのがわかります。
もうひとつ おまけに
プログラムを構成してみると
#include<stdio.h>
typedef enum Fruits{Orange, Apple=7, Lemon }Fruits;
int main(void){
printf("%d\n",Orange);
printf("%d\n", Apple);
printf("%d\n", Lemon);
return 0;
}
コンパイル結果
0
7
8
Orangeにはいつも通り0が割り振られ
真ん中のAppleには
Apple=7と数値が割り振られたので
その1つの右隣の
Lemonに割り振られた数値は1増加して8になっているのがわかります。
」
ソーラー「列挙体も文字定数を格納するというデータのいれものだったんだね。
構造体も
共用体も
列挙体も
データを格納するいれものだったというわけだったんだ・・
データ格納方法はこれでおわりかな?」
アレサ 「もし 機械語をつかいこなすことができれば
今、C言語で使われている
構造体
共用体
列挙体
だけでなく
自由に
データを格納するいれものがつくれますの。」
ソーラー
「そうなのぉ
データを格納する新しいいれもの
自然体
健康体
発光体
なんてこっ体
飛んでいき体
ディズニーランドにいき体
なんかも自分でつくれたら楽しいね。」
アレサ「実際に 自分で数値データを格納する
いれものをつくることができれば
今までの
構造体
共用体
列挙体
を
さらに改良した
新しい体
を形成することは可能とおもわれますの。」
ソーラー「そこまでいくと
もう新しいプログラミング言語を作るような感覚だね。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます