美文网首页
C/C++第五课~结构体、共用体

C/C++第五课~结构体、共用体

作者: XX杰 | 来源:发表于2022-11-07 15:21 被阅读0次

    1、结构体

    结构体是C编程中一种用户自定义的数据类型,类似于Java的JavaBean
    内存分配采用 字节对齐 的方式 有一个 预处理其 可以指定 对其的字节数
    { #pragma pack(2) } // 指定以2字节 进行对齐 可以有效的节省存储空间

    #include <stdio.h>
    
    // 1、结构体,结构体根据其内部的声明和声明的顺序不同,分配的内存大小也不一样
    struct Hello
    {
        int a;
        short b;
        short c;
    };
    // 2、结构体分配的内存是 最大占有字节的变量的 整数倍 
    // 结果是8字节,是因为两个 short 所占据的字节数合并了。正好等于 一个 int 
    // 而 hello3 没有挨着, 无法合并
    struct Hello2
    {
        short a;
        short b;
        int c;
    };
    // 3、Hello3 是 12 字节,是因为 里面的 int 是 4字节,
    // 他需要的内存应该是 int 的整数倍。
    // 而两个short 占据的字节数 也是 4个 字节
    #pragma pack(2)  // 本来是占据 12 个字节,但是加入了 pragma 所以就以2字节进行对齐,占据8字节了
    typedef struct majie
    {
        short a;
        int b;
        short c;
    } Hello3;
    #pragma pack()
    
    int main(){
        
        struct Hello h1;
        struct Hello2 h2;
        // 因为 Hello3 是 typedef 为 majie 的结构体 取的一个新的名字
        // 所以 typedef 的 一个作用是 给已有的 结构体 类 数据类型 起 别称
        Hello3 h3;
    
        printf("h1 size=%d  h2 size=%d  h3 size=%d \n", 
    sizeof(h1), sizeof(h2), sizeof(h3));
        return 0;
    }
    

    2、共用体

    1、共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型
    2、具有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。
    3、其占用的内存的大小是 其中 成员的 数据类型 中所需要的最大的。也就是说 共用体占用的内存应足够存储共用体中最大的成员
    4、每次只有一个 可以 赋值
    所以共用体的作用就是,当我们需要多个数据类型的时候,但是每个数据类型只有一个在使用,这种情况下,就使用共用体。节省内存,而不是每一个数据类型都要声明。

    #include <stdio.h>
    #include <string.h>
    union Qiao1
    {
        int a;      // 4字节
        float c;    // 4字节
        long b;     // 8字节
        char d[10]; // 10字节
    } data;
    
    int main(){
    // 共用体是 共用同一块内存,所以,共用体的数据,是最后一次赋值所决定的
        printf("data 共用体的数据大小 size=%d %d\n", sizeof(data), sizeof(data.d));
        return 0;
    }
    

    结果不太一样,data的大小是16

    相关文章

      网友评论

          本文标题:C/C++第五课~结构体、共用体

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