C言語学習:列挙型列挙

列挙型は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バイトを占めます。

おすすめ

転載: blog.csdn.net/Yang_1998/article/details/106482044