C/C++学习之复合类型
1、结构体定义及赋值
1.1、复合类型在内存中存放的模型
1.2、定义结构体格式
struct 结构体名称
{
结构体成员列表
} ; 分号结尾
1.3、在主函数中结构体表述格式
定义结构体变量:
①struct 结构体名称 结构体变量名
②结构体变量名.机构体成员列表 = 值
注:如果是字符串类型 需要使用strcpy;
1.4、赋值方式
1.4.1、按照结构顺序赋值
1.4.2、赋值方式2
1.4.3、赋值方式3
注意:如果是是字符串格式需要使用strcpy来进行赋值
1.4.4 赋值方式4
1.5、结构体大小和内存结构
1.5.1、结构体大小
打印结果:结构体大小56
注意:结构体需要根据数据类型进行内存对齐;
1.5.2、内存结构模型图
注意:所有数据类型的大小在内存中存储一定是他的类型的倍数,方框一定是结构体最大的类型字节。
比如:结构体中有int,char,float,short,double。那么框的大小是8个字节。
1.6 结构体数组
1、结构体数组格式
2、结构体和指针
①结构体成员为指针:
②结构体指针
释放
③堆空间开辟结构体,通过指针来实现
1.7 结构体作为函数参数
1、结构体做为形参,不会改变主函数中实参的值;
2、结构体指针做为形参
返回方式
1、结构体作为返回值
2、结构体指针作为返回值
1.8 结构体嵌套结构体
1、定义及赋值
1.9 结构体找到属性的偏移量
引入头文件 #include <stddef.h>
函数为offsetof(结构体名称,属性) 返回值就是偏移量
1.10 结构体的bit定义
typedef struct _mm_com_hdr
{
UINT8 tag;
UINT8 nodeID;
UINT8 linkID;
UINT8 dtmb_support:1,
dtmb_icmp:1,
rsv:6; // srv保留位,如果只是用其中几位的话,最好使用保留位进行存放。
UINT16 length;
UINT16 sn;
}MM_COM_HDR,*PMM_COM_HDR;
2、共用体
联合union是一个能在同一个存储空间存储不同类型数据的类型;
格式:union 共用体名称 成员列表 共用体变量名
注意:共用体所占的内存长度等于其最长成员的长度;
在共用体中最后一次赋值,它的值为准确的。
3、枚举
enum 将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
应用方向:流程化操作,枚举与switch联合使用
4、typedef
作用:为一种数据类型(基本类型或自定义数据类型)定义一个新名字,不能创建新类型