• enum, sizeof, typedef


    枚举类型enum

    • enum 是 C 语言中的一种自定义类型
    • enum 值是可以根据需要自定义的整型值
    • 第一个定义的 enum 值默认为 0
    • 默认情况下的 enum 值在前一个定义值得基础上加 1
    • enum 类型的变量只能取定义时得离散值
      1. void code()
      2. {
      3. enum Color
      4. {
      5. GREEN, // 0
      6. RED = 2, // 2
      7. BLUE, // 3
      8. };
      9. enum Color c = GREEN;
      10. printf("%d\n", c);
      11. }

      枚举类型的特殊意义

      • enum 中定义的值是 C 语言中真正意义上的常量
      • 在工程中 enum 多用于定义整形常量或离散的整型常量

     

    1. void code()
    2. {
    3. enum // 无名枚举,用于定义常量
    4. {
    5. ARRAY_SIZE = 10, // 定义数组大小
    6. };
    7. int array[ARRAY_SIZE] = {0};
    8. int i = 0;
    9. for(i=0; i< ARRAY_SIZE; i++)
    10. {
    11. array[i] = i + 1;
    12. }
    13. }

     实例分析 : enum 的使用

    1. #include <stdio.h>
    2. enum
    3. {
    4. ARRAY_SIZE = 10, // 定义常量
    5. };
    6. enum Color
    7. {
    8. RED = 0x00FF0000, // 定义整形离散值
    9. GREEN = 0x0000FF00,
    10. BLUE = 0x000000FF
    11. };
    12. void PrintColor(enum Color c)
    13. {
    14. switch( c ) // 用于 switch case
    15. {
    16. case RED:
    17. printf("Color: RED (0x%08x)\n", c);
    18. break;
    19. case GREEN:
    20. printf("Color: GREEN (0x%08x)\n", c);
    21. break;
    22. case BLUE:
    23. printf("Color: BLUE (0x%08x)\n", c);
    24. break;
    25. default:
    26. break;
    27. }
    28. }
    29. void InitArray(int array[])
    30. {
    31. int i = 0;
    32. for(i=0; i<ARRAY_SIZE; i++)
    33. {
    34. array[i] = i + 1;
    35. }
    36. }
    37. void PrintArray(int array[])
    38. {
    39. int i = 0;
    40. for(i=0; i<ARRAY_SIZE; i++)
    41. {
    42. printf("%d\n", array[i]);
    43. }
    44. }
    45. int main()
    46. {
    47. enum Color c = GREEN;
    48. int array[ARRAY_SIZE] = {0}; // 用于定义数组
    49. PrintColor(c);
    50. InitArray(array);
    51. PrintArray(array);
    52. }

    输出:

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

    sizeof 关键字

    • sizeof 是编译器的内置指示符
    • sizeof 用于计算类型或变量所占的内存大小
    • sizeof 的值在编译期就以确定

      • sizeof 用于类型 : sizeof(type)
      • sizeof 用于变量 : sizeof(var) 或 sizeof var

     

    1. void code()
    2. {
    3. int var = 0;
    4. printf("%d\n", sizeof(int));
    5. printf("%d\n", sizeof(var));
    6. printf("%d\n", sizeof var);
    7. }

     实例:

    1. #include
    2. double f()
    3. {
    4. printf("D.T.Software\n");
    5. return 0.0;
    6. }
    7. int main()
    8. {
    9. int var = 0;
    10. int size = sizeof(var++);
    11. printf("var = %d, size = %d\n", var, size);
    12. size = sizeof(f());
    13. printf("size = %d\n", size);
    14. }

    输出:

    1. 输出:
    2. var = 0, size = 4
    3. size = 8
    4. 分析: 注意 var = 0 ; sizeof(f()) = 8
    5. sizeof 不是函数,不会在运行时计算变量或类型的值,而是在编译时,所有的 sizeof 都被具体的值替换。
    6. sizeof(var++) 在编译时直接被替换,var++ 得不到执行。

     typedef

    • typedef 用于给一个已经存在的数据类型重命名
    • typedef 本质上不能产生新的类型
    • typedef 重命名的类型:

      • 可以在 typedef 语句之后定义
      • 不能被 unsigned 和 signed 修饰

     实例:

    1. #include <stdio.h>
    2. // --- 定义方式 1
    3. typedef int Int32;
    4. // --- 定义方式 2
    5. struct _tag_point
    6. {
    7. int x;
    8. int y;
    9. };
    10. typedef struct _tag_point Point;
    11. // --- 定义方式 3
    12. typedef struct
    13. {
    14. int lengyh;
    15. int array[];
    16. }SoftArray;
    17. // --- 定义方式 14
    18. // 编译器没有要求被重命名的类型必须先定义在可以
    19. typedef struct _tag_list_node ListNode;
    20. struct _tag_list_node
    21. {
    22. ListNode* next;
    23. };
    24. int main()
    25. {
    26. Int32 i = -100; // int
    27. // unsigned Int32 ii = 0; // Error
    28. Point p; // struct _tag_point
    29. SoftArray* sa = NULL;
    30. ListNode* node = NULL; // struct _tag_list_node
    31. }

    小结

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

      • 重命名的类型可以在 typedef 语句之后
  • 相关阅读:
    2.01_python+Django+mysql实现pdf转word项目_项目开发- 创建Django项目
    DYVAL: GRAPH-INFORMED DYNAMIC EVALUATION OF LARGE LANGUAGE MODELS
    SpringBoot+html+vue模板开发
    mac 13.x 打开第三方应用,提示已损坏无法打开
    手把手教你GPT4.0画画
    记录一些mac电脑重装mysql和pgsql的坑
    Ajax基础
    机器学习-吴恩达老师笔记
    11/27周总结报告
    软件测试|MySQL WHERE条件查询详解:筛选出需要的数据
  • 原文地址:https://blog.csdn.net/hulinhulin/article/details/133624672