结构体:
提供一种可以让程序员自定义数据类型的方式
目的:
用来解决 一些 复杂的数据类型问题
结构体 是一种数据类型 --- 构造类型
结构体类型 构造(定义)语法:
//构造一个结构体类型 --- 声明结构体
struct 结构体名
{
成员列表
};
举例:
struct student
{
char name[20];
char sex;
int sno;
float score;
};
//结构体变量初始化
struct student s = {"xiaoMing",0,1110,99.5} ;
//初始化 ,需要按照 成员列表的顺序,依次初始化
//成员与成员之间的初始化的值,用逗号隔开
//s变量中,存储的是某一个学生的信息
结构体变量的引用:
方法: 结构体变量名.成员名
. 结构体成员运算符 //表示 从属关系
s.name //表示访问s变量中的 name
//结构体变量 赋值
结构体变量不能整体输入值 ,只能输入给成员变量
声明结构体类型并使用的三种方式:
1. 方式1
先声明类型 后定义变量
struct student
{
...
};//声明类型
struct student s; //定义变量
2. 方式2
声明类型的同时定义变量
struct student
{
...
}s;//声明类型 并 定义变量
3. 方式3
声明类型的同时,定义变量,但是结构体名,可以省略
struct
{
...
}s;//声明类型 并 定义变量
结构体特点:
1.成员变量 一般是不同类型 //表示不同的含义
2.对于成员变量的访问
只能通过 . (成员运算符),逐个访问
不能通过类似 数组下标的方式,进行逐个遍历
. //成员运算
方法:
结构体变量名.成员变量名
-> //指针的结构体成员运算
方法:
结构体类型指针->成员变量名
内存对齐
结构体对齐规则
结构体的对齐:
结构体的对齐规则: //内存地址的对齐
1.在32位的平台上,默认都是按4字节对齐的。
2.对于成员变量,
各自在自己的自然边界上对齐。
char -- 1字节
short -- 2字节
int -- 4字节
3.如果 成员变量中有比4字节大。
此时 整个结构体按照4字节对齐。
4.如果 成员变量中没有有比4字节大。
此时 整个结构体按照最大的那个成员对齐。
//32位的平台
//如果有超过4字节 ,按照4字节对齐
//如果没有超过4字节的,则按成员变量中最大对齐
//64位的平台
//如果超过4字节的,按照最大的成员对齐
//如果没有超过4字节的,则按成员变量中最大对齐