• 结构体和联合体


    1.结构体的定义


        struct xxx
        {
            int a;
            int b;
        };
        typedef struct xxx A;
    --------------------------------------
        typedef struct name
        {
            int a;
            int b;
        }NAME;
    2.字对齐
        以定义的变量最大字长为基本单位,如果两个变量的字节不够一个字长,可以合并为一个字长;
       typedef struct name
        {
            int a;
            char c;
            int b;
        }NAME;
        printf("%ld\n",sizeof(Name));--------结果为12字节
            
     3.位域/位段
            可以自定义比特(bit)位,如果定义的不足一个字长,按照一个字长输出;
        typedef struct name
        {
            int a:8;
            char c:4;
            int 0;
        }NAME;
        printf("%ld\n",sizeof(Name)); -------结果为4字节
            
    4.结构体数组的定义
            
            struct 结构体名 结构体数组名[] 
            {
                {数组变量赋值},
                {数组变量赋值},
                .....
            }

    2.结合体/联合体的定义


        以定义变量的最大字长,变量们共用这个空间内存。
        union xxx
        {
            int a;
            int b;
        };
        typedef union xxx A;

    ---------------------------------
        
        typedef union name
            {
                int a;
                char c;
                int b;
            }NAME;
        printf("%d\n",sizeof(Name));----------结果为4字节
            
    2.应用在通用一个接口,或者计算ip地址、1个字节进制数的大小;

        typedef union aaa
        {
            int a;
            struct{
                char a1;
                char a2;
                char a3;
                char a4;
                  }b;
        }XXX;    

        int main()
        {    
            XXX x;
            x.a = 0x11223344;

            printf("%#x\n", x.b.a1);
            printf("%#x\n", x.b.a2);
            printf("%#x\n", x.b.a3);
            printf("%#x\n", x.b.a4);
        }

    补充:grep pragma -r 可以修改字长为1字节;
        #pragma pack(1)
        system("stty -icanon");
        可以不用回车返回输出;

  • 相关阅读:
    涵盖 MySQL 的大多数核心服务功能
    分布式事务
    springboot post添加URL添加参数
    优化 - 不要在for循环中调用数据库
    第四代智能井盖传感器,实时守护井盖位安全
    Linux系统编程:编译过程以及GDB调试
    如何看懂万行代码
    将语雀文档迁移到飞书
    办公自动化解决方案——DocuWare Cloud 将应用程序和流程迁移到云端的完整的解决方案
    Unity中Shader需要了解的点与向量
  • 原文地址:https://blog.csdn.net/m0_49236682/article/details/140000200