Aprendizagem de linguagem C: enumeração enum

Enumeração é um tipo de dados básico na linguagem C, que pode tornar os dados mais concisos e fáceis de ler.

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;
}

O valor padrão do primeiro membro de enumeração é um inteiro 0, e o valor dos membros de enumeração subsequentes é adicionado ao membro anterior por 1. Neste exemplo, definimos o valor do primeiro membro de enumeração como 1 e o segundo como 2

enum DAY
{
    
    
      MON, TUE=3, WED, THU
};

Para elementos de enumeração que não especificam um valor, o valor do elemento anterior mais um. Em outras palavras, o valor de MON é 0, o valor de TUE é 3, o valor de WED é 4 e o valor de THU é 5

Como atravessar tipos enumerados?
Na linguagem C, os tipos de enumeração são tratados como tipos int ou int sem sinal, portanto, não há como percorrer os tipos de enumeração de acordo com a especificação da linguagem C.
Se você deseja percorrer o tipo de enumeração, o tipo de enumeração deve ser contínuo para obter travessia condicional.

#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);
    }
}

Combinar com interruptor

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;
}

Ocupar memória:
citado após adicionar uma descrição de link. O
tipo de enumeração se refere a uma coleção de constantes inteiras nomeadas. Ou seja, o tipo de enumeração é essencialmente uma coleção de um conjunto de constantes, mas essas constantes têm seus próprios nomes. O tipo de enumeração é um tipo de dados definido pelo usuário.
Variáveis ​​de enumeração são variáveis ​​definidas por tipos de enumeração. O tamanho da variável de enumeração, ou seja, o tamanho da memória ocupada pelo tipo de enumeração. Devido à atribuição de variáveis ​​de enumeração, apenas uma constante na estrutura de enumeração pode ser armazenada por vez. Portanto, o tamanho da variável de enumeração é essencialmente o tamanho do espaço de memória ocupado pela constante (a constante é do tipo int e o tipo int no compilador principal atual é geralmente de 4 bytes em máquinas de 32 bits e 64 bits máquinas), enumeração O mesmo é verdadeiro para o tamanho da memória ocupada pelos tipos.
Além disso, você pode usar o indicador interno sizeof do compilador para calcular o tamanho da variável de enumeração (ou tipo de enumeração) para verificação.

例子:
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));//赋值后的枚举变量占用几个字节;
}

Venha para uma pergunta: Calcule o espaço de memória ocupado por um objeto de classe

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;
}

Análise Simples:

  • Moldar i ocupa 4 bytes
  • União U, o maior tipo de dados ocupa 4 bytes, o maior membro ocupa 13 bytes e o alinhamento da memória é um múltiplo de 16.
  • A função foo () não ocupa espaço
  • O tipo char * não define variáveis ​​e não ocupa espaço
  • enum ocupa 4 bytes,
    portanto, ocupa 24 bytes

Acho que você gosta

Origin blog.csdn.net/Yang_1998/article/details/106482044
Recomendado
Clasificación