自定义类型的学习

结构体:
匿名结构体只能使用一次;
数据结构:描述的是数据在内存中的存储和组织结构;顺序表,链表;
结构体自引用:节点数据域和指针域;
结构体内存对齐;对齐规则:

            1.结构体第一个成员对齐到和结构体变量起始位置偏移量是0的位置;
            2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处; 
            对齐数:编译器默认的一个对齐数 与该成员变量大小的较小值;vs中默认的是8,
            3.结构体的总大小为最大对齐数(结构的每个成员都有一个对齐数,所有对齐数中最大的)的整数倍;
            4.如果嵌套结构体,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构体的整体大小,就是所有最大对齐数的整数倍;
宏 offsetof 可以计算结构体成员相较于起始位置的偏移量; 
为什么会存在内存对齐:1.平台原因:不是所有的平台都能访问任意地址的任意数据,某些硬件平台只能在某些地址处取某些特定类型数据;
            2.性能原因;节省时间,对齐的内存一次只用访问一次;
位段从左到右依次使用;剩余空间不够,下一个,位的大小不能超过成员大小; 从右向左还是从左向右不确定,存在跨平台性的问题;
不能对位段的成员使用&操作符;创造一个临时变量使用scanf对这个变量赋值再给位段变量;
栈内地址从高到低,一个对象内从低到高;
联合体和枚举:
联合体(union)类型声明:与结合体相似,有一个或多个成员组成;这些成员可以是不同类型;但是编译器只为最大的成员分配足够的内存空间,联合体的特点是成员公用同一块内存空间,也叫共用体; 给联合体一个成员赋值时,其他成员的也在变; 
联合体的大小至少是最大成员的大小;也存在对齐,对齐规则:最大对齐数的整数倍;
枚举:顾名思义一一列举; 把可能的情况列举出来;
关键字 enum 用逗号隔开每个元素之间; 枚举的可能取值是常量;初始值可以修改;枚举类型的变量只能用枚举常量;
枚举的优点: 1.增加代码的可读性和可维护性;
                       2.和#define定义的标识符比较枚举有类型检查,更加严谨;
                       3.便于调试,预处理阶段会删除#define定义的符号;直接替换成数字;
                       4.使用方便,一次可以定义多个常量;
                       5.枚举常量遵循作用域规则的,枚举声明在函数内,只能在函数中使用;#define定义是全局范围没有作用域的;
枚举变量可以在switch语句中使用;

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值