1.结构体概念:
结构体是由一系列相同类型或不同类型的数据用构造方法构造的数据集合,也叫结构。
2.结构体作用:
结构体可以把功能相同的数据组织起来,存在一起,用的时候方便,而且在调用函数时,若传递的参数较多,传一个结构体相对而言简单些,很多系统自带的函数必须用结构体。
3.结构体的定义:
struct结构体名{
成员列表;
}; //注意此处的分号不能省
4.结构体变量定义
1)先定义结构体,然后再定义结构体变量
格式:
struct结构体名{
成员列表;
};
struct结构体名 结构体变量名;
// 定义一个学生的结构体
struct Student{
char name[20];
char sex[4];
int age;
float score;
int no;
}; // 注意:结构体定义完成后,计算机并不会给结构体分配内存空间,而会再定义结构体变量后,分配存储空间。
struct Student stu1; // 表示定义一个Student结构体变量,变量的名称是stu1,stu1因为是Student类型,所以可以存放学生的姓名、性别、年龄、成绩、学号
2)定义结构体同时定义结构体变量
格式:
struct结构体名{
成员列表;
}结构体变量1,结构体变量2……;
// 定义结构体同时定义结构体变量
struct Student{
char name[20];
char sex;
int age;
float score;
int no;
}stu2,stu3; // 用student结构体定义了两个结构体变量,名称分别为stu2和stu3
3)使用匿名结构体定义结构体变量
格式:
struct {
成员列表;
}结构体变量1,结构体变量2……;
// 使用匿名结构体定义结构体变量
struct {
char name[20];
char sex;
int age;
float score;
int no;
}stu4,stu5; // 用匿名结构体定义了两个结构体变量,名称分别为stu4和stu5
5.结构体变量中成员的访问方法
表示结构体变量成员的一般形式是: 结构体变量名.成员名
如:stu1.name 表示访问学生1的姓名
6.结构体变量的初始化
//先定义一个学生的结构体
struct Student{
char name[20];
char sex[4];
int age;
float score;
int no;
};
1)先定义结构体变量,再初始化
struct Student stu1;
stu1.age = 23;
strcpy(stu1.name, "gamhunter");
2)定义结构体变量的同时,进行初始化。注意:初始化的顺序要和定义结构体的顺序一致
struct Student stu6 = {"张三","男",23,23.4f,2345};
3)定义结构体的同时,对指定元素进行初始化
struct Student stu7 = {.name = "李四"};
7.结构体存储
1)结构体占用的内存空间是每个成员占用的字节数之和(同时考虑对齐问题)。
2)计算结构体变量在内存中占用字节数的方法:先找对齐模数(结构体中基本数据类型中占用字节数最大的那个),再计算结构体变量中各个成员占用的字节数之和。
8.结构体的作用域
结构体根据作用域可以分为全局结构体和局部结构体。
1)全局结构体定义在函数外部,它的作用域从定义的那一行开始直到本文件结束。
2)局部结构体定义在函数内,其作用域在局部变量的作用域相同,只在代码块内部。