1.定义:
- 结构体可以理解为自定义的数据类型
- 是由一批数据组合而成的结构型数据
2.格式
#include <stdio.h>
int main()
{
struct 结构体名字
{
成员1;
成员2;
......
}
return 0;
}
struct Teacher
{
char name[100];
int age;
int workAge;
}
结构体:
- 自定义的数据类型
- 就是由很多的数据组合成的一个整体
- 每一个数据,都是结构体的性质
书写的位置:
- 函数的里面:局部位置,只能在本函数中使用
- 函数的外面:全局位置,在所有的函数中都可以使用
练习:



另外:函数名如果太长也可以起别名
typedef struct
{
成员1;
成员2;
......
}别名;//这个别名可以很短
使用时可以直接写别名.变量
练习:

3.结构体作为函数参数进行传递
函数中可以传递结构体
会出现两种情况:
- 传递结构体中的数据值
- 传递结构体的地址值

ps:如果要在函数中修改stu的值,此时就不要再定义一个新的变量了,直接接收stu的内存地址,通过内存地址(即指针)就可以修改stu中的数据了,指针st里记录的是main函数中stu的内存地址(stu 学生)
4.结构体的嵌套
如果结构体中成员的类型是其他的结构体,就用到了结构体的嵌套
注意:结构体嵌套批量赋值时,里面要再加一个大括号
练习:

5.综合练习


6.结构体内存对齐
- 确定变量位置:只能放在自己类型整数倍的内存地址上
- 内存对齐:不管是结构体还是普通变量,都存在内存地址
- 规则:只能放在自己类型整数倍的内存地址上
比如:int类型的字节数为4,所以要接着放好的空间剩下的往下放在整数倍的位置上,然后依次挨着往下放4个,char类型的字节数为1,放哪都一样,只占一个空间
- 另外,最开头放的直接从0位置开始放字节数,比如下面的double
- 注意:
结构体的内存对齐要在上面的规则上加一条:结构体的总大小是最大类型的整数倍(用来确定最后一个数据的补位情况),注意对齐的时候会有一些位置空白,会补上空白字节,但这些不会影响到原来补上的类型的字节数,比如char补上后字节数依然为1
- 心得:我们会把小的数据类型写在上面,大的写在下面,尽量地节约空间
图例:

操作验证:
