列挙型はC言語の基本的なデータ型であり、データをより簡潔で読みやすくすることができます。
enum colors
{
red,blue,yellow
}clo;
int main(void)
{
clo=red;
printf("%d\n",clo); //0
clo=yellow;
printf("%d\n",clo); //2
return 0;
}
最初の列挙型メンバーのデフォルト値は整数0であり、後続の列挙型メンバーの値は前のメンバーに1ずつ追加されます。この例では、最初の列挙メンバーの値を1として定義し、2番目の列挙メンバーの値を2として定義します。
enum DAY
{
MON, TUE=3, WED, THU
};
値を指定しない列挙要素の場合、前の要素の値に1を加えたもの。つまり、MONの値は0、TUEの値は3、WEDの値は4、THUの値は5です。
列挙型をトラバースする方法は?
C言語では、列挙型はint型またはunsigned int型として扱われるため、C言語の仕様に従って列挙型をトラバースする方法はありません。
列挙型をトラバースする場合、条件付きトラバーサルを実現するには、列挙型が連続している必要があります。
#include <stdio.h>
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
int main(void)
{
// 遍历枚举元素
for (day = MON; day <= SUN; day++) {
printf("枚举元素:%d \n", day);
}
}
スイッチと組み合わせる
enum colors
{
red,blue,yellow
};
int main(void)
{
enum colors clo;
scanf("%d",&clo);
switch(clo)
{
case red:
printf("你喜欢红色\n");
break;
case blue:
printf("你喜欢蓝色\n");
break;
case yellow:
printf("你喜欢黄色\n");
break;
default:
printf("没有你喜欢的颜色\n");
}
return 0;
}
メモリの占有:リンクの説明の追加
から引用されます。
列挙型は、名前付き整数定数のコレクションを指します。つまり、列挙型は基本的に定数のセットのコレクションですが、これらの定数には独自の名前があります。列挙型はユーザー定義のデータ型です。
列挙型変数は、列挙型によって定義される変数です。列挙型変数のサイズ、つまり、列挙型が占めるメモリのサイズ。列挙変数の割り当てにより、列挙構造内の定数のみを一度に格納できます。したがって、列挙変数のサイズは、基本的に定数が占めるメモリ空間のサイズです(定数はint型であり、現在の主流コンパイラのint型は通常32ビットマシンと64ビットでは4バイトです。マシン)、列挙型が占めるメモリのサイズについても同じことが言えます。
さらに、コンパイラーの組み込みインジケーターsizeofを使用して、検証用の列挙型変数(または列挙型)のサイズを計算できます。
例子:
int main()
{
enum number {
one = 1,
two = 2,
three = 3,
foure = 4,
};
enum number num1;
printf("int sizeof:%d\n",sizeof(int));//int类型占用几个字节;
printf("enum number sizeof:%d\n",sizeof(enum number));//枚举结构enum number占用几个字节;
printf(" variable num1 sizeof:%d\n",sizeof(num1));//定义后的枚举变量占用几个字节;
num1 = three;
printf("after 'num1 = three' ,variable num1 sizeof:%d\n",sizeof(num1));//赋值后的枚举变量占用几个字节;
}
質問に来てください:クラスオブジェクトが占めるメモリスペースを計算してください
class A
{
int i;
union U
{
char buff[13];
int j;
}u;
void foo(){
};
typedef char* (*f) (void*);
enum {
red,blue,pink} color;
};
int main(void)
{
A a;
printf("%d\n",sizeof(a));
return 0;
}
簡単な分析:
- シェーピングiは4バイトを占めます
- 最大のデータ型であるUnionUは4バイトを占有し、最大のメンバーは13バイトを占有し、メモリアライメントは16の倍数です。
- 関数foo()はスペースを取りません
- char *型は変数を定義せず、スペースを占有しません
- 列挙型は4バイトを占める
ため、24バイトを占めます。