结构体和共用体
为什么需要结构体
传统解决办法
数组是相同类型数据的集合。
结构体可以存放不同类型的数据。
结构体和结构体变量的区别和联系
1)结构体是自定义的数据类型,表示的是一种数据类型,
2)结构体变量是一个具体变量
int num1l//int为数据类型,而num1是具体的int变量
3)结构体变量在同一内存区域

结构体成员
结构体变量需要给成员赋值,如果没有赋值就使用可能导致程序异常终止。

成员是结构体的一个组成部分,一般为基本数据类型,也可以是数组,指针,结构体等。
一个结构体变量成员的更改不影响其他成员。

定义结构体的三种方式
赋值方式
1)


具体例子
三种定义方式

结构体应用实例
1)一个景区根据游人的年龄收取不同价格的门票。
2)游人结构体(visitor),根据年龄段决定能够购买的门票价格并输出
3)规矩:年龄》18 门票为20 其他情况免费
4)可以循环从控制台输入名字和年龄,打印门票收入情况,如果名字输入n,则推出程序
#include<stdio.h>
#include<stdib.h>
struct Visitor {
char name[10];
int age;
double pay;//应付票价
}
//因为结构体默认为值传递,会拷贝一份完整的数据,因此,为了提高效率,我们直接接收地址
void ticket(struct Vistor*vistor){
if ((*vistor).age>18){
(*vistor).pay=20;
}
else{
(*vistor).pay=0;
}
}
void main(){
while(1){
printf("请输入名字和年龄");
scanf("%s%d",&vistor.name,&vistor.age);
if !strcmp(vistor.name,"n"){
break;
}
ticket(&vistor);
printf("门票钱%d",ticket.pay);
}
printf("退出程序");
getchar();
getchar();
}
共用体
共用体的内存布局


实践
#include<stdio.h>
#define TOTAL 2 //人员总数
struct Person{
char name[20];
int number;
char sex;
union{
float score;
char couse(20);
}sc
}
void main(){
int i;
struct Person persons[TOTAL];//定义一个数组
for (i=0;i<TOTAL;i++){
scanf("%s%d%c%s",persons[i].name,&persons[i].num.........)//个人数据取出
if(persons[i].profession=='s'){
printf("请输入学生成绩");
scanf("%f",&persons[i].sc.score);
}else{
scanf("%s",persons[i].sc.course);
}
fflush(stdin);//刷新
}
//输出人员数据
..............
}

浙公网安备 33010602011771号