结构体、共用体、枚举

一、结构体的相关知识:

1、定义结构体类型,只说明该类型的组成情况,并没有分配内存空间。只有当定义属于结构体类型的变量时,系统才会分配空间给该变量。

2、结构体定义类型中不允许对结构体本身的递归定义。

3、结构体定义中可以包含另外的结构体,即结构体是一嵌套的。

4、结构体变量可以在定义时进行初始化赋值。

例如:struct person{

  char name[20];

  char sex;

}girl1={"tangtang",'F'};

二、共用体的相关知识:

1、结构体和共用体都是由多个不同的数据类型成员组成,但在任一时刻,共用体中只存放了一个被选中的成员,而结构体的所有成员都存在。对于共用体的不同成员赋值,将会对其他成员重写,原来成员的值就不存在了,而对于结构体的不同成员赋值是互不影响的。

2、共用体占用内存为个成员中占用最大者内存。而结构体占用内存与具体的sizeof有关。

三、枚举的相关知识:

1、对于枚举中,如果不给枚举常量赋初值,编译器会为每一个枚举量赋一个不同的整型值,第一个为0,第二个为1等。当枚举表中某个常量赋值后,其后的成员则按一次加1的规则确定其值。

四、sizeof的计算:

1、sizeof(int):4; short:2;;long:4;float:4;double:8;char:1; 指针:4;

2、struct的空间计算:

(1)整体空间时占用空间最大的成员(的类型)所占字节的整数倍。

(2)整数对齐原则——内容按结构体成员的先后顺序排序,当排到该成员变量时,其前面已摆放的空间大小必须是该成员类型大小的整数倍,如果不够则补齐。

例如:

struct s1{

    char a;    

   double b;

   int c;

   char d;

};

struct s2{

  char a;

char b;

int c;

double d;

};

cout<<sizeof(s1)<<endl;   //24

cout<<sizeof(s2)<<endl;   //16


3、使用“#pragma pack"时结构体空间计算:

#pragma pack(n),n为字节对齐数,其取值为1、2、4、8、16等,默认为8。如果这个值比结构体成员的sizeof值小,那么该成员的偏移量应该以此值为准。

4、空结构体的大小不为0,为1。

5、共用体(Union)的sizeof就是每个成员sizeof的最大值。

6、枚举类型的sizeof为4。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值