• 数据结构:共用体+枚举


    一、共用体

    1.共用体中的所有成员,共享一片内存空间,成员的首地址都相同

    2.共用体的大小,取决于共用体中成员大小更大的那个

    3.一个成员的数据发生修改,另一个会跟着修改

    1.定义

    定义结构体时的struct改成union即可

    访问共用体成员与访问结构体成员类似。  变量用.访问,指针用->访问

    1. union A
    2. {
    3. int a;
    4. char c;
    5. }; //声明共用体类型
    6. union A a1; //定义了一个共用体变量

    2.大小端存储(字节序问题)

    小端存储:地址低位存数据低位 (常见的计算机都是小端存储)

    大端存储:地址地位存数据高位 (网络通信的数据包一般是大字节序)

    2.1使用共同体判断字节序问题

    1. #include
    2. union A
    3. {
    4. char t1;
    5. int t2;
    6. };
    7. int main(int argc, const char *argv[])
    8. {
    9. union A a1; //栈区
    10. a1.t2 = 0x12345678; //0x12数据高位 0x78数据低位
    11. printf("%#X\n",a1.t1); //访问共用体中的地址低位
    12. printf("%p\n",&a1.t1);
    13. printf("%p\n",&a1.t1+3);
    14. return 0;
    15. }

    2.2使用指针判断字节序问题

    1. #include
    2. int main(int argc, const char *argv[])
    3. {
    4. int a = 0x12345678;
    5. char *p = &a; //为了只取a的低地址的数据
    6. if(*p==0x78)
    7. {
    8. printf("小端\n");
    9. }
    10. else
    11. {
    12. printf("大端\n");
    13. }
    14. return 0;
    15. }

    二、枚举(enum)

    1.定义

    1. enum 枚举名
    2. {
    3. 枚举项1,
    4. 枚举项2,
    5. 枚举项3,
    6. ···
    7. 枚举项n,
    8. }; --->使用enum 枚举名 定义变量
    9. typedef enum 枚举名
    10. {
    11. 枚举项1,
    12. 枚举项2,
    13. 枚举项3,
    14. ···
    15. 枚举项n,
    16. }新的枚举名; ---->使用新的枚举名定义变量

    2.举例

    1. #include
    2. enum week
    3. {
    4. Sun,
    5. Mon,
    6. Tue,
    7. Wed=6,
    8. Thu,
    9. Fri,
    10. Sat,
    11. };
    12. int main(int argc, const char *argv[])
    13. {
    14. int a = Sun;
    15. //Sun = 90; 枚举项不能被赋值
    16. printf("%d\n",a);
    17. printf("%d\n",Mon);
    18. printf("%d\n",Tue);
    19. printf("%d\n",Sat);
    20. return 0;
    21. }

    3.使用场景

    3.1

    1. #include
    2. enum week
    3. {
    4. Sun,
    5. Mon,
    6. Tue,
    7. Wed,
    8. Thu,
    9. Fri,
    10. Sat,
    11. };
    12. void week_p(enum week p)
    13. {
    14. switch(p)
    15. {
    16. case Sun:
    17. printf("p是星期天\n");
    18. break;
    19. case Sat:
    20. printf("p是星期六\n");
    21. break;
    22. case Mon:
    23. printf("p是星期一\n");
    24. break;
    25. }
    26. }
    27. int main(int argc, const char *argv[])
    28. {
    29. week_p(Mon);
    30. return 0;
    31. }

    3.2

    1. #include
    2. #include
    3. enum LED{
    4. LED_1,
    5. LED_2,
    6. LED_3,
    7. };
    8. enum LED_CON{
    9. LED_ON,
    10. LED_OFF,
    11. };
    12. void inint(enum LED L){
    13. switch(L){
    14. case LED_1:
    15. printf("LED_1初始化成功\n");
    16. break;
    17. case LED_2:
    18. printf("LED_2初始化成功\n");
    19. break;
    20. case LED_3:
    21. printf("LED_3初始化成功\n");
    22. break;
    23. }
    24. }
    25. void con(enum LED L,enum LED_CON C){
    26. switch(L){
    27. case LED_1:
    28. switch(C){
    29. case LED_ON:
    30. printf("LED_1 打开\n");
    31. break;
    32. case LED_OFF:
    33. printf("LED_1 关闭\n");
    34. break;
    35. }
    36. break;
    37. case LED_2:
    38. switch(C){
    39. case LED_ON:
    40. printf("LED_2 打开\n");
    41. break;
    42. case LED_OFF:
    43. printf("LED_2 关闭\n");
    44. break;
    45. }
    46. break;
    47. case LED_3:
    48. switch(C){
    49. case LED_ON:
    50. printf("LED_3 打开\n");
    51. break;
    52. case LED_OFF:
    53. printf("LED_3 关闭\n");
    54. break;
    55. }
    56. break;
    57. }
    58. if(L==LED_1 && C==LED_ON) //这里的LED_1不写成L==“LED_1”
    59. printf("LED_1 打开\n");
    60. if(L==0 && C==0)
    61. printf("LED_1 打开\n");
    62. //这里的LED_1就相当于一个宏定义
    63. //define LED_1 0
    64. }
    65. int main(int argc, const char *argv[])
    66. {
    67. init(LED_1);
    68. con(LED_1,LED_ON);
    69. init(LED_2);
    70. con(LED_2,LED_OFF);
    71. init(LED_3);
    72. con(LED_3,LED_ON);
    73. return 0;
    74. }

    //这里的LED_1就相当于一个宏定义
        //define LED_1 0

  • 相关阅读:
    英国2.8万的A-Level学生拿不到offer
    LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Prefix tuing等]
    halcon模板匹配和旋转矫正
    DNA修饰金属铑Rh纳米颗粒RhNPS-DNA(DNA修饰贵金属纳米颗粒)
    [flink]部署模式
    React 18 + Babel 7 + Webpack 5 开发环境搭建
    代码随想录算法训练营第53天 | 1143、1035、53
    不推荐“溜溜球节食法”的10个理由
    宝塔部署nginx遇到的400错误和502错误
    IntelliJ IDEA 2023.2.1 (Ultimate Edition) 版本 Git 如何找回被 Drop Commit 的提交记录
  • 原文地址:https://blog.csdn.net/weixin_50022690/article/details/136220006