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

  • 相关阅读:
    盛最多水的容器
    字符串的排序
    整数拆分
    TCP和UDP编程
    旋转图像
    非递减数列
    不同路径2
    不同路径
    压缩拉伸图片
    Java对List分割及使用Spring多线程调用
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3778592.html
Copyright © 2011-2022 走看看