1.结构体
1.1概念
描述一类事物相关属性的集合,是一种自定义的数据类型
1.2定义
struct 结构体名
{
属性1;
属性2;
};
例:描述一个学生的姓名,年龄
struct stdent
{
char name[20];//姓名
int age;//年龄
};
//定义了一个结构体,结构体的数据类型为struct stdent
1.3初始化
数据类型 变量名;
int a = 0;
struct 结构体名 结构体变量 ={…};
struct stdent stu ={“zhangsan",18};
1.4访问
方式一:
变量名.成员
方式二:
指针变量->成员
数据类型 *指针变量名;
int a;
int * p=&a;
int arr[3]={0};
int (*p)[3]=&arr;
struct stduent *p;
1.5字节对齐
一次性分配多少个字节
自然对齐方式(32OS):
char:1字节对齐
short:2字节对齐
int:4字节对齐
float:4字节对齐
double:4字节对齐,分配的时候分配两次就可以了。
字节对齐:选成员中最大的那个对齐
节省结构体空间的办法:
总结:(1)将数据类型最大的放在最前面
(2)位域/位段
未优化之前:
优化之后:
将data结构体中的变量定义为比特位类型的,因为是32位的系统,所以12+4+5=21,小于32位,所以也按照最大的对齐方式存放,占4个字节。
所以20+4+4=28字节
注意位域不能使用标准输入进行输入,因为找不到地址。但是可以正常赋值。
1.6给结构体取别名
方式一:
方式二: