一、基本概念
是由一系列具有相同类型或不同类型的数据构成的数据集合
定义的一般格式:
struct 结构名{
成员列表;
};
//定义一个学生的结构
struct student{
int num;
char name[20];
char sex;
float score;
}
二、结构体变量的定义
1.先定义结构体,再定义结构体变量
struct Student{
//学生学号
int sno;
//学生姓名
char name[20];
int age;
float score;
};
struct Student stu1;//struct 结构体名 结构体变量名
//这句话表示定义了一个Student结构体类型的变量,变量的名称是stu
//stu是Student类型,stu可以存放学生的学号、姓名、年龄、成绩
2.定义结构体的同时,定义结构体变量
struct 结构体名{
成员列表;
}结构体变量1,结构体变量2...;
3.使用匿名结构体定义结构体变量
struct {
}结构体变量1,结构体变量2....;
struct {
char *color;
int lunzi;
int speed;
}car1,car2,car3;
三、结构体变量中成员的访问
一般形式:
结构体变量名.成员名
boy1.num 即第一个人的学号
boy2.sex 即第二个人的性别
如果成员本身又是一个结构体则必须逐级找到最低级的成员才能使用
四、结构体变量的初始化
1.先定义结构体变量,再初始化
struct stu{
int num;
char name[20];
char sex;
float score;
};
struct stu boy1,boy2;
boy1.num = 10010;
boy1.sex = 'f';
boy1.score = 59.99f;
2.定义结构体变量的同时初始化
五、结构体数组
结构体数组概念:结构体数组的每一个元素都是具有相同结构类型的下标结构变量
定义格式:
struct 结构名{
成员表列;
}数组名[数组长度];
struct stu{
int num;
char *name;
char sex;
float score;
}boy[5];//定义了一个结构数组boy,共有5个元素,boy[0]-boy[4],每个数组元素都具有struct stu的结构形式
结构体数组的初始化和遍历:
//初始化
//1.定义同时初始化
struct Student {
char name[20];
int age;
}boys[3] = {{"lwh",21},{"zbz",32},{"cgx",22}};
//2.定义的同时初始化
struct Student girls[2] = {{"adc",19},{"fei",21}};
//3.先定义,后初始化
struct Student ds[2];
ds[0] = (struct Student){"xmd",22};
//4.
struct Student ss[2];
ss[0].age = 21;
//遍历
for (int i=0; i<3; i++) {
printf("name = %s,age = %d\n",boys[i].name,boys[i].age);
}
运行结果:
name = lwh,age = 21
name = zbz,age = 32
name = cgx,age = 22
六、结构体指针
概念:指向结构变量的指针称为结构指针变量,结构指针变量中的值是所指向的结构变量的首地址
struct 结构名 *结构指针变量名;
struct Car{
int lunzi;
int speed;
}car1;
struct Car *p = NULL;
p = &car1;//正确的
//p = &Car//错误的