自定义数据成员
结构体,枚举,自定义
1.结构体
1.结构体的声明
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
2.匿名结构体类型(只用一次)
3.结构体的内存对齐(计算结构体大小)
后来的理解
从三个角度来考虑:
1.对于类(或结构体)中的一个变量而言,他要在对齐数(较小值)的整数倍地址处。
2.对于整个类(或结构体),它的总大小(可用sizeof计算)一定是最大对齐数(相对于各数据成员而言)的整数倍。s
3.一个对象所占空间大小只取决于该对象中数据成员所占空间,而与成员函数无关。
提示
第一条中偏差为0的地址的理解,如果我们把之后的地址(所代表的内存空间)都以此(偏差为0的地址)为标准来编一个数字序列,那么这个序列是从0开始的,第二条由此理解:比如对于char,double a。double a,a的对齐数是8,所以要从偏差为8始对齐。那在偏差8之前就会有偏差(0~7个byte)。
默认对齐数:gcc没有
代码示例:
main()
{
struct s3
{
double d;
char c;
int i;
}s3;
printf("%d\n", sizeof(s3));
}
结果:16
嵌套结构体大小的计算
为什么存在内存对齐
修改默认对齐数的方式
#pragma pack(4)//设置默认对齐数为4
#pragma pack()//取消设置的默认对齐数
计算结构体成员的偏移量offsetof( )
关于宏
之前提到过一次,#define,参数可以传类型
代码举例
#include<stddef.h>
main()
{
struct s3
{
double d;//从0开始
char c;//偏移量为8,前面是偏移量0-7共8个byte
int i;//8+4=12
}s3;
printf("%d\n", offsetof(struct s3,d));
printf("%d\n", offsetof(struct s3, c));
printf("%d\n", offsetof(struct s3, i));
}
结构
4.结构体传参
5.位段
位段的定义
代码
解释
6.枚举
代码示例
枚举的优点
7.联合(又名联合体,共用体)
定义
代码示例
联合体的特点
结枚联的区别
关键字,性质
联合体判断大小端存储
联合体大小的计算
![在这里插入图片描述](https://img-blog.csdnimg.cn/bb74c0fdab6d4215928a14a3537c2e06.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAeWFuZ2hhbmc2NjY2NjY=,size_20,color_FFFFFF,t_70,g_se,x_16)