11_enum,sizeof,typedef分析

作者: 编程半岛 | 来源:发表于2018-03-04 14:29 被阅读17次

    关键词:enum, sizeof, typedef

    1. 枚举类型的使用方法

    • enum是C语言中的一种自定义类型
    • enum值是可以根据需要自定义的整形值
    • 第一个定义的enum默认为0
    • 默认情况下的enum值是在前一个定义值的基础上加1
    • enum类型的变量只能取定义时的离散值
    #include <stdio.h>
    
    enum Color
    {
        GREEN,
        RED = 2,
        BLUE
    };
    
    int main()
    {
        enum Color green = GREEN;
        enum Color red = RED;
        enum Color blue = BLUE;
        
        printf("green = %d\n", green);
        printf("red = %d\n", red);
        printf("blue = %d\n", blue);
    
        return 0;
    }
    

    输出结果:

    green = 0
    red = 2
    blue = 3
    

    2. 枚举类型的特殊意义

    • enum中第一的值是C语言中的真正意义上的常量
    • 在工程中enum多用于定义整形常量
    #include <stdio.h>
    
    // 用无名枚举类型定义整型常量
    enum 
    {
        ARRAY_SIZE = 10
    };
    
    int main()
    {
        int array[ARRAY_SIZE] = {0};
        
        for(int i=0; i<ARRAY_SIZE; i++)
        {
            printf("%d\n", array[i]);
        }
        
        return 0;
    }
    

    3. enum的使用

    #include <stdio.h>
    
    enum 
    {
        ARRAY_SIZE = 10
    };
    
    enum Color
    {
        RED = 0x00FF0000,
        GREEN = 0x0000FF00,
        BLUE = 0x000000FF
    };
    
    void PrintColor(enum Color color)
    {
        switch(color)
        {
            case RED:
                printf("Color: RED (0x%08x)\n", color);
                break;
            case GREEN:
                printf("Color: GREEN (0x%08x)\n", color);
                break;
            case BLUE:
                printf("Color: BLUE (0x%08x)\n", color);
                break;
            default:
                printf("Color: ERROR");
                break;
        }
    }
    
    void InitArray(int* arr)
    {
        for(int i=0; i<ARRAY_SIZE; i++)
        {
            arr[i] = i + 1;
        }
    }
    
    void PrintArray(int* arr)
    {
        for(int i=0; i<ARRAY_SIZE; i++)
        {
            printf("%d\n", arr[i]);
        }
    }
    
    int main()
    {
        int array[ARRAY_SIZE] = {0};
        
        enum Color green = GREEN;
        
        InitArray(array);
        
        PrintArray(array);
        
        PrintColor(green);
        
        
        return 0;
    }
    

    输出结果:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Color: GREEN (0x0000ff00)
    

    4. sizeof关键字的用法

    • sizeof是编译器的内置指示符
    • sizeof用于计算类型或变量所占的内存大小
    • sizeof的值在编译器就已经确定
    • sizeof的用法:
      用于类型sizeof(type)
      用于变量sizeof(var) or sizeof var
    #include <stdio.h>
    
    int main()
    {
        int i = 0;
        
        printf("%d\n", sizeof(int));
        printf("%d\n", sizeof(i));
        printf("%d\n", sizeof i);
        
        return 0;
    }
    

    5. sizeof的本质

    • sizeof是C语言的内置关键字而不是函数
    • 编译过程中所有的sizeof将被具体的数值所替换
    • 程序的执行过程与sizeof没有任何关系
    #include <stdio.h>
    
    int main()
    {
        int var = 0;
        int size = sizeof(++var);   // sizeof为C语言关键字,不是函数,在编译期间sizeof将被具体的值所提换,因此在编译期间 数值4将替换sizeof(++var),语句++var不会执行
        
        printf("var = %d, size = %d\n", var, size);
        
        return 0;
    }
    

    输出结果:

    var = 0, size = 4
    

    6. typedef的意义

    • typedef用于给一个已经存在的数据类型重命名
    • typedef本质上不能产生新的类型
    • typedef重命名的类型:
      可以在typedef语句之后定义
      不能被unsignedsigned修饰
    • typedef的用法:typedef type new_name;
    #include <stdio.h>
    
    typedef int INT32;
    
    struct _tag_point
    {
        int x;
        int y;
    };
    
    typedef struct _tag_point Point;
    
    typedef struct
    {
        int len;
        int array[];
    } SoftArray;
    
    typedef struct _tag_list_node ListNode;
    struct _tag_list_node
    {
        ListNode* next;
    };
    
    int main()
    {
        INT32 i = 100;          // int
    //  unsigned INT32 ui = 1;  // 由typedef重命名的变量不能被unsigned修饰
        
        Point p;                // struct _tag_point
        SoftArray* sa = NULL;   // struct
        ListNode* node = NULL;  // struct _tag_list_node
        
        return 0;
    }
    

    7. 小结

    • enum用于定义离散值类型
    • enum定义的值是真正意义上的常量
    • sizeof编译器的内置指示符
    • sizeof不参与程序的执行过程
    • typedef用于给类型重命名,重命名的类型可以在typedef语句之后定义

    声明:此文章为本人在学习狄泰软件学院《C语言深度解析》所做的笔记,文章中包含狄泰软件资料内容一切版权归狄泰软件所有!

    相关文章

      网友评论

        本文标题:11_enum,sizeof,typedef分析

        本文链接:https://www.haomeiwen.com/subject/tesffftx.html