目前已学的数据类型:数组(1、所有数据的类型必须一致 2、访问数组的成员必须通过下标)
学籍管理系统:学生(姓名、学号、性别、年龄、成绩...)
飞机票订票系统:机票(订票时间、班号、起点、终点...)
酒店订票系统:房间 (预定时间、房号、位置...)
C语言的内置类型:bool、char、short 、int、long、long long、float 、double、long double
1、C语言为什么需要结构题?
是为了描述复杂个体,只用基础的内置类型不能完整的表述。
2、如何去定义结构题?
结构体定义好之后,它就和内置类型没有区分
struct +结构体名//struct在C语言中不能丢,C++可以
{
成员列表;
};
struct Student
{
char name[20];//名字、容纳10个汉字
int id;//学号
char sex;//性别 1男0女
int age;//年龄
int score;//总成绩
};
int main()
{
struct Student stu_arr[10];
struct Student stu_brr[10] = { "caocoa",12345,1,30,88,"liubei",23456,1,35,85 };//只初始化了前两个结构体
int len = sizeof(stu_brr) / sizeof(stu_brr[0]);//求长度
for (int i = 0; i < len; i++)
{
printf("%s", stu_brr[i].name);
printf("%d", stu_brr[i].id);
if (stu_brr[i].sex==0)
{
printf("男");
}
else
{
printf("女");
}
printf("%d", stu_brr[i].id);
printf("%d\n", stu_brr[i].score);
}
}
struct Student stu1={ "caocao",12345,1,30,88 };//给了结构体初始值,对应姓名、学号、性别、年龄、总成绩
struct Student stu2 = { "caocao" };//只赋值一部分,其他部分默认为0
struct Student stu3;//不初始化都是随机值
struct Student* stup = &stu1;//stu1的地址
struct Student* stup;//指向随机值
struct A
{
int a;
int b;
};
struct B
{
int a;//数据域
struct A b;//嵌入结构体
struct B* b;//自嵌时只能是指针变量,因为知道空间大小 指针域
};
3、如何使用结构体?
3.1结构体普通变量怎么访问其成员
C语言规定,结构体的普通成员可以用过 ‘ . ’ 来访问
struct Student
{
char name[20];//名字、容纳10个汉字
int id;//学号
char sex;//性别 1男0女
int age;//年龄
int score;//总成绩
};
int main()
{
struct Student stu1 = { "caocoa",12345,1,30,88 };
struct Student stu2 = { "liubei", 23456,1,35,85 };
struct Student stu3 = { "sunquan", 23457,1,18,87};
//打印 struct Student stu1的信息
printf("%s ", stu1.name);
printf("%d ", stu1.id);
printf("%d ", stu1.sex);
printf("%d ", stu1.age);
printf("%d\n", stu1.score);
stu1.id = 678989;//修改stu1的学号
//stu1.id = "caopi";结构体成员是字符串,不能直接用=修改
strcpy_s(stu1.name, "caopi");//修改名字,用 strcpy函数
printf("%s ", stu1.name);
printf("%d ", stu1.id);
printf("%d ", stu1.sex);
printf("%d ", stu1.age);
printf("%d\n", stu1.score);
}
3.2结构体指针变量怎么访问其成员:可以通过->方式访问
系统简化:(*p).name==p->name
struct Student
{
char name[20];//名字、容纳10个汉字
int id;//学号
char sex;//性别 1男0女
int age;//年龄
int score;//总成绩
};
int main()
{
struct Student stu1 = { "caocoa",12345,1,30,88 };
struct Student stu2 = { "liubei", 23456,1,35,85 };
struct Student stu3 = { "sunquan", 23457,1,18,87};
struct Student* p = &stu3;//指针指向stu3地址
(*p).id = 76543;//利用指针修改stu3的学号
p->sex = 0;//修改性别
strcpy_s((*p).name, "sunjian");
//(*p).name==p->name
//printf("%s ", (*p).name);
printf("%s ", p->name);
printf("%d ", p->id);
printf("%d ", p->sex);
printf("%d ", p->age);
printf("%d\n", p->score);
}