结构体类型 --- 用来描述复杂数据的一种数据类型
构造类型 --- 用户自定义类型
结构体
怎么描述一个数据类型?
语法:
struct 结构体类型名
{
成员列表;
};
(1)struct 关键字:表示在构造一个结构体的类型
(2)结构体名:用来描述结构体这个类型的名称
(3)成员列表:表示要描述的复杂数据中用到的具体的成员变量
定义的方式,与之前变量方式相同
多个成员变量之间,用分号隔开
(4)最后有一个分号表示结束
例:
struct student
{
int sno;
char name;
float score;
}; //表示定义出一个数据类型
注意:
1、结构体类型使用过程
a.先定义出类型
b.定义变量
2、定义变量
struct 结构体名 变量名;
-> 指向结构体成员 运算符
结构体指针->成员名
结构体变量名.成员名
结构体初始化:struct
初始化:
看每个成员变量,具体是什么数据类型
根据各个成员变量自身数据类型,进行初始化
初始化顺序按照定义顺序依次初始化
结构体变量的引用:就结构体数据引用时,一般用引用到具体的数据
. 使用形式:
-> 指向结构体成员运算符
结构体指针 -> 成员名
结构体变量名.成员名
结构体类型的大小:
内存对齐
结构体对齐规则
结构体的对齐:
结构体的对齐规则: //内存地址的对齐
1.在32位的平台上,默认都是按4字节对齐的。
2.对于成员变量,
各自在自己的自然边界上对齐。
char -- 1字节
short -- 2字节
int -- 4字节
3.如果 成员变量中有比4字节大。
此时 整个结构体 按照4字节对齐。 //32位的平台
4.如果 成员变量中没有有比4字节大。
此时 整个结构体 按照最大的那个成员对齐。
//32位的平台
//如果有超过4字节 ,按照4字节对齐
//如果没有超过4字节的,则按成员变量中最大对齐
----------------------------------------------
//64位的平台
//如果超过4字节的,按超过的最大的成员变量对齐
//如果没有超过4字节的,则按成员变量中最大对齐
-----------------------------------------------
union
共用体
union
语法:
union 共用体名
{
成员变量;
};
eg:
union demo
{
char a;
short b;
int c;
};
共用体:
共用了一块内存空间
公用了最大成员的空间
注意:
1.共用体初始化时,只能给一个值,默认时给到第一个成员的。
2.共用体变量中的值,取决与最后一次给到的值,还要看能影响几个字节。
对比 结构体
1.结构体中各个成员 拥有自己独立空间
2.共用体中,成员共用一块空间