第8章C语言的结构体与共同体
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
说明:
✓ 结构体类型与结构体变量概念不同
类型:不分配内存;
变量:分配内存
类型:不能赋值、存取、运算; 变量:可以
✓ 结构体可嵌套
✓ 结构体成员名与程序中变量名可相同,不会混 淆
✓ 结构体类型及变量的作用域与生存期
9
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
定义数据类型
合法标识符
– 结构体类型定义
可省:无名结构体
struct [结构体名]
{
类型标识符 成员名;
struct是关键字, 不能省略 };
类型标识符 成员名;
…………….
成员类型可以是
基本型或构造型
2
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
例 struct student
char name[20]; char sex; int age; };
{ struct student *p; printf(" No. Name sex age\n"); for (p=stu;p<stu+3;p++)
struct student stu[3]={ printf("%5d %-20s %2c 4d\n",
例strsutcrtuct { { int num; 类c型ha标r 识na符me[20]成; 员名; 类c型ha标r s识ex符; 成员名; int…a…ge;………. }变量名表flo列at;score; char addr[30]; }stu1,stu2; 用无名结构体直接定义 变量只能一次
8
例 struct student
{ int num;
char name[20];
char sex;
int age;
char addr[30];
}stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
12
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
} 14
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
8.1.5 结构体数组
– 结构体数组的定义
形式二一三::
25B
stsrtuructctstsutuddenent t
{ int num;
char name[20];
char sex;
int age;
}s;tu[2];
struct student stu[2];
struct 结构ch体ar名ad变dr量[30名];表列;
};
struct student stu1,stu2
6
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
• 定义结构体类型的同时定义结构体变量 – 一般形式:
例strustcrtuct stu结d构en体t 名 { { int num;
8.1 结构体
例 统计后选人选票
struct person { char name[20];
int count;
name Li
}leader[3]={“Li”,0,“Zhang”,0,”Wang“,0}; Zhang
main() { int i,j; char leader_name[20];
Wang
int age; float score;
num:1001,age:19,score:98.5
}stu;
void main()
{ printf("Enter num,age,score:");
scanf("%d,%d,%f",&stu.num,&stu.age,&stu.score);
printf("num:%d,age:%d,score:%.1f\n",stu.num,stu.age,stu.score);
struct student stu1; struct student *p=&stu1; stu1.num=101; (*p).num=101
19
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
例 输出数组中各元素中各成员的值。
struct student
{int num;
main()
Biblioteka Baidu
num name sex age num name sex age
stu[0] stu[1]
15
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
– 结构体数组的初始化
– 结例构体st数ru组ct 的引用
{ int num;
引用方式:cha结r 构na体me数[2组0]名; [下标].成员名
}
count 0 0 0
17
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
8.1.6 结构体指针变量
一个指针变量可以指向一个结构体数组元素(将该结 构体数组的数组元素地址赋给此指针变量)。
– 定例义形式str:uscttruct 结构体名 *结构体指针名;
例 stru{ctinsttuad;ent *p;
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
2、结构体变量的输入输出 不允许对结构体变量进行整体的输入输出 如:scanf(“%s%c%d%f”,&stu1);
struct student
程序运行过程:
{
Enter num,age,score:
int num;
1001,19,98.5↙
10
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
8.1.4 结构体变量的使用
1、 结构体变量的初始化
– 形式一:
例 struct ssttruudcetnt 结构体名 { in{t num; char类na型m标e[识20符]; 成员名; char类sex型; 标识符 成员名; int age…; …………. ch};ar addr[30]; }; struct 结构体名 结构体变量={初始数据};
8.1 结构体
8.1.2 结构体变量的定义
• 先定义结构体类型,再定义结构体变量 – 一般形式:
s例trucsttru结ct 构st体ud名ent
{ { int num; 类型标c识ha符r na成m员e[2名0];; 类型标c识ha符r sex成; 员名;
………int…ag…e;.
};
float score;
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
第八章 结构体、共用体和枚举类型
8.1 结构体 8.2 共用体 8.3 枚举类型 8.4 用typedef定义类型
1
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
8.1.1 结构体类型声明
结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整体-------自
类c型ha标r 识na符me[20]成; 员名; 类c型ha标r s识ex符; 成员名;
in…t a…ge…; ……. }变量名表flo列at;score;
char addr[30]; }stu1,stu2;
7
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
• 直接定义结构体变量 – 一般形式:
8.1 结构体
8.1.3 结构体变量的引用
• 引用规则 – 结构体变量不能整体引用,只能引用变量成员
• 引用方式: 结构体变量名.成员名
如果结成构员体(分变量)类运型算相符同,可以将一个结 构体变量优赋先值级给:另1 一个结构体变量
结构体结嵌合套性时:从逐左级向引例右用; stu1=stu2;
例: stu1.birthday.day=23; stu1.birthday.month=8; stu1.birthday.year=2003;
3
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
例 个人数据: 包 含姓名、性别、年 龄、身高、体重、 住址:
struct person
{char name[20]; /*姓名*/
char sex;
/*性别*/
int age;
/*年龄*/
float height;
/*身高*/
float weight;
{10101,"Zhang",'M',18}, p->num,p->name,p->sex,p->age);
{10102,"Li",'M',19},
}
{10103,"Wang",'F',20}
};
20
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
指针移动示意图: P
10101
注意:
char sex;
age
int age;
}stu;
struct student *p=&stu;
18
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
– 使用结构体指针变量引用成员形式
(*结构体指针名).成员名 结构体指针名->成员名
结构体变量名.成员名 指向运算符 例 iinntt优结*先合np;=级方&:向n;:1 从左向右 *p=10; n=10
此时p指向arr数组的第一
struct stfulodaent tb; 存放结构体p个 于变元 “量p素=在,&nau“r内mrp[存=0a]的r;r”;起”。始等若价执地址
{ in}at rnru[3m];,*p; pch=aarrnra;me[20];
行 量p“此p+时+n指;sa”em向x则ear此r[时1指]s。t针u 变
struct student stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
11
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
– 形式二:
struct
结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}结构体变量={初始数据};
/*体重*/
char addr[50]; /*住址*/
};
例 日期, 包括年、 月、 日:
struct date {int year; /*年*/ month; /*月*/ day; /*日*/
};
4
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
结构体类型可以嵌套定义 即一个结构体类型中的某 些成员又是其他结构体类型
stu[0]
"Zhang" 'M'
①如果p的初值为stu,即指P向’ 第一个元11素8010,2 则p+1后
指向下一个元素的起始地址。s请tu区[1]别:"Li"
(++p)->num 和 (p++)->num
如职工信息结构体类型为:
struct person
{
char name[20]; /*姓名*/
char address[40]; /*地址*/
float salary;
/*工资*/
float cost;
/*扣款*/
struct date hiredate; /*聘任日期*/
};
5
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
num
{ int num;
name
char name[20]; sex
char sex;
age
int age;
float score; char addr[30]; score
};
addr
…
2字节 20字节 1字节 2字节
4字节
30字节
…..
s等不结tr都能构uc只省体t s是略类tu其。型de中定nt的义应成的作员作为用,一域且个s类tr型u结的c整t构组及体体织“,类形}n型式”um定,后不,n义的分am描“配e述;[内2结0”存] 构
char sex;
struct studeint age;
stu[1].age++;
{ in}tstun[u]m=;{{……},{……},{……}};
char name[20];
char sex;
int age; }str[3];
strcpy(stu[0].name,”ZhaoDa”);
16
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
for(i=1;i<=10;i++)
{ scanf("%s",leader_name);
for(j=0;j<3;j++)
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++;
}
for(i=0;i<3;i++)
printf("%5s:%d\n",leader[i].name,leader[i].count);
– 形式三:
struct {
类型标识符 成员名; 类型标识符 成员名;
……………. }结构体变量={初始数据};
例 struct { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”}; 13