Pace 12 (自定义类型:结构体 位段 枚举 联合)
来源:互联网 发布:无情对 知乎 编辑:程序博客网 时间:2024/06/05 03:54
结构体
1.结构体的地址 :地址从小到大,且结构体的地址和第一个成员的地址相同,元素地址依次增大
2.结构体的声明 :结构体是一些值得集合,这些值称为成员变量,每个成员可以是不同类型的变量
3.结构体成员的访问
结构体变量访问成员 :通过( . )访问,点操作符接受两个操作数
struct stu{char name[20];int age;};int main(){struct stu s;strcpy(s.name, "zhangsan");s.age = 20; //通过点操作符访问结构体成员}结构体访问指向变量的成员 :通过( -> )访问
struct stu{char name[20];int age;};int main(){struct stu *s;strcpy(s->name, "zhangsan");s->.age = 20; //通过 -> 指向访问结构体成员}4.结构体的自引用
5.结构体内存对齐 :计算结构体的大小 (单位:字节)
规则:(1)第一个成员在与结构体偏移量为0的地址处
(2)其余变量要对齐到对齐数的整数倍的地址处
对齐数=编译器默认对齐数与该成员大小的最小值(VS 默认 8 Linux 默认 4)
(3)结构体总大小为最大对齐数的整倍数
(4)如果结构体嵌套结构体,嵌套的结构体对齐到自己的最大对齐数的整倍数。结构体整体的对齐数为最大对齐数的整倍数
例1:
例2:
S1与S2的类型成员完全相同,但是S2比S1所占内存却更小。
所以,在我们设计结构体时,为了节省空间,我们应尽量让占用空间小的成员聚集在一起。
例3:
例4:
6.结构体传参
分析以上的代码,print1和print2选择哪一个进行结构体传参?
应首选pring2
因为函数传参时需要创建栈帧结构,在传递结构体对象时,如果结构体过大,参数压栈系统开销比较大,导致性能下降。
位段
1.成员:位段的成员必须输 int,unsigned int,signed int,char。成员名后面有一个冒号和一个数字。
2.创建:创建方法与结构体一致,只是在每个成员后加一个冒号和一个数组。
struct A{int a : 2;int b : 5;int c : 10;int d : 30;}A;3.位段的大小:
位段成员冒号后的数字代表这个成员所占有的bit位的位数
与结构体相比,位段可以节省很多空间,但是无法解决跨平台问题。
枚举
1.枚举就是将现实中有限的集合一一列举出来
2.枚举类型的定义:
enum Day{Mon,Tues,Wed,Thur,Fri,Sat,Sun};{}中的内容是枚举的可能取值,也叫枚举常量。这些可能取值都是有值得,默认是从0开始,一次递增1
也可以在定义的时候赋值,赋值以前的元素依旧保持从0开始,依次递增1,在赋值以后的可能取值按赋的值依次递增1
3:有点
(1)代码的可读性高
(2)比#define定义的标识符更加的严谨
(3)防止命名污染
(4)便于调试
(5)使用方便,一次可定义多个常量
联合(共用体)
1.联合类型的声明
union Un{char c;int i;};联合也是一种自定义类型。
这种类型定义的变量包含一系列成员,这些成员公用一块空间。
每一个成员的地址都等于联合体的地址
2.联合体的大小:
(1)联合体的大小,至少是最大成员的大小
(2)当最大成员的大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍。
- Pace 12 (自定义类型:结构体 位段 枚举 联合)
- 自定义类型(结构体、位段、枚举和联合)
- 自定义类型:结构体,位段,枚举,联合
- 自定义类型(结构体,枚举,联合,位段)
- 自定义类型(结构体,位段,枚举,联合)总结
- 自定义类型部分知识写一篇博客。 知识点: >结构体类型创建 >结构体初始化 >结构体内存对齐 >位段,位段计算机大小。 >枚举+联合。
- 自定义类型—结构体,位段,联合
- 总结结构体枚举联合位段
- 结构体、位段、枚举、联合
- 自定义类型:结构体、枚举、联合
- 自定义类型:结构体,枚举,联合
- 自定义类型:结构体,枚举,联合
- 自定义类型:结构体,枚举,联合
- 位段与联合,枚举类型
- 自定义类型——结构体、枚举、联合
- 自定义类型——结构体,枚举,联合
- 【结构体】关于结构体,枚举,联合,位段的一些知识
- 浅谈 位段?枚举?联合?
- Android 如何加速./mk snod打包
- 228. Summary Ranges
- 友盟第三方 登录与分享功能实现
- 155. Min Stack
- Codeforces Round #442 (Div. 2) F. Ann and Books 莫队,离散化
- Pace 12 (自定义类型:结构体 位段 枚举 联合)
- myeclips 提交代码到bitbucket或者github
- 基于live555的一个简单RTSP服务器
- 当下的生活
- Toast的优化操作
- python数字图像处理(1):环境安装与配置
- pythonic
- java获取文件的详细信息
- linux安装配置php