关于C++和C的区别:
struct 结构标签 { 类型1 标识符1; 类型2 标识符2; 类型3 标识符3; 类型4 标识符4; 类型5 标识符5; }; 1、建议将struct的声明和变量的定义分开写, 2、struct内可以放任何类型的变量声明。
对齐原则: 1、数据成员对齐规则。每个数据成员存储的起始位置要从该成员大小的整数倍开始。 2、数据成员包含结构体:结构体成员要从其内部最大元素大小的整数倍地址开始存储。 3、结构体的总大小:是其内部最大基本成员的整数倍,不足的要补齐。 union的定义: union 联合标签 { 类型1 标识符1; 类型2 标识符2; 类型3 标识符3; 类型4 标识符4; 类型5 标识符5; };
1、结构体中,每个变量依次存储。 2、联合体中,每个变量都是从偏移地址零开始存储,每次只有一个成员存储于该地址。
enum 枚举标签{small, media =7, large =10,humungous}; 1、枚举通过简单的操作将一串名字和一串整型值相联系起来。 2、缺省情况下,枚举从零开始,如果对列表中的某一个标识符赋值,下一个标识符值比前面一个的值大1. 3、#define 定义的值在编译时候消失,但是枚举定义的,则在调试的过程任然是可见的,可以在代码调试中使用它们。 举个例子: 仔细的看看,很重要,老是用的不对,自己给自己找麻烦的。 ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// struct的最终大小考虑是最大的那个类型的倍数和每个都要对齐; enum的大小考虑是最大的那个 enum是枚举,就是某个变量的值是能够列举的,比如,星期的话就每周1到7,月的话就1到12、而struct的话是对于某个变量是有很多数据类型构成一个总体的,比如学生这个变量,他需要学号,姓名,年龄,性别等等,这个时候就需要定义结构体了。而uninon的话呢,其中定义的变量都只占一同块内存。。。 对于结构体:考虑要对齐和占用最大空间的元素所占空间的倍数 对于联合体:考虑是里面所有类型数据占用空间的倍数同时还要比最大的那个还要大的最小数,就是联合体占用的空间,注意数组类型的处理!!! typedef enum sizeof(ANDataType) 为 4
====================================================== sizeof(AAA) 为 结构中长度最大的变量的倍数(遵循内存对齐的原则),如上,double 的长度为 8, 则整个为 8*2 = 16, 因为 char 长度为1,两个char 为2,仍小于8,故按8计算,若有9个char变量,则其中 8个char 合计为 8,剩余一个不 足8 按 8字节计算。比如: struct
AAA ====================================================== union AAA 联合,则以定义中最大的数据类型的长度为准,此联合的 size 为 8 备注: union 与 struct 的大小与其内部定义的函数无关!!! |
|