zoukankan      html  css  js  c++  java
  • c++结构体、共用体和枚举

    结构体类型

    c++中的结构体成员既可以是数据,也可以是函数

    c语言中定义结构体变量必须加struct(这也是很多时候和typedef),但是在c++里面,可以不加

    结构体和类的不同在于,结构体中的变量默认是public类型,而类则默认是private

    struct空间计算:

    1)整体空间是占用空间最大成员(类型)的整数倍,但是在linux +c++环境下,如果最大成员类型占据的字节书超过4,那么整体空间是4的倍数即可。

    2)数据对齐原则,内存按照结构提成员先后顺序排列,当排到该成员变量时候,其前面已占用的空间大小必须为该类型的整数倍,否则补齐(在linux系统下),当该类性占据空间》=4字节的时候,依旧仅需要是4的倍数即可。

    struct s1{
    char a;
    double b;
    int c;
    char d;
    };
    在windows下是24,在linux下是20

    对于包含子结构体的空间计算:

    1)整体空间是子结构体与父结构体占用空间最大成员(类型)的整数倍,但是在linux +c++环境下,如果最大成员类型占据的字节书超过4,那么整体空间是4的倍数即可。

    2)数据对齐原则,内存按照结构提成员先后顺序排列,当排到该成员变量时候,其前面已占用的空间大小必须为该类型的整数倍,否则补齐(在linux系统下),当该类性占据空间》=4字节的时候,依旧仅需要是4的倍数即可;当排到子结构体成员变量时候,其前面已占用的空间大小必须为子结构体中最大类型大小的整数倍,否则补齐(在linux系统下),当该类性占据空间》=4字节的时候,依旧仅需要是4的倍数即可。。
     对于包含数组的结构体空间计算:

    结构提中,数组是按照单个变量一个一个进行拜访,而不是视为整体。

    stuct{

    int a;

    char b[8];

    }

    占用大小为12

    综上,对于结构体中包含结构体或数组的情况,在考虑对齐或者总空间为最大元素占用空间的倍数的时候,亦数组或者结果体中单独元素(最大)占用的空间为准,但是结构体和数组本身占用的空间不变。

    还有包含位域的结构体大小计算,这个暂时不管。

     

    共用体类型

    一次仅采纳一个变量,所占空间为各个成员占用空间最大者

    枚举类型:

    占用空加一定为4

  • 相关阅读:
    codeforces 869E. The Untended Antiquity(二维树状数组,随机化)
    bzoj 3083: 遥远的国度(树上换根操作,树剖+询问整个子树)
    hdu 5534 Partial Tree(dp+降唯,好题)
    AtCoder Regular Contest 075 E
    hihocoder 1387 A Research on "The Hundred Family Surnames"(树,lca,求同一颜色的直径)
    hdu 5458 Stability(生成树,树链剖分,好题)
    推荐一套个人ui组件库
    回望2019,期盼2020
    如何从产品的角度对待自己的博客
    致一名迷茫的我
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3778592.html
Copyright © 2011-2022 走看看