C语言第9章结构体与共用体

合集下载

C语言数据结构-第9章 结构体共用体与枚举

C语言数据结构-第9章 结构体共用体与枚举
"Guang Zhou","13901000002"}, {"Gu YuPing",18,"F","2019010003",2019,5,5,"Han",
"Shang Hai","13901000003"}}; int i; for(i=0;i<3;i++) { printf("%s,%d,%s,%s,",stud[i].name,stud[i].age,stud[i].sex,stud[i].xh); printf("%d,%d,%d,",stud[i].birthday.year,stud[i].birthday.month, stud[i].birthday.day); printf("%s,%s,%s\n",stud[i].nation,stud[i].address,stud[i].tel); } }
成员运算符“.”的优先级最高,在表达式中的结构体变量成员不 需要加括号。例如:
wang.age++;
相当于
(wang.age)++;
注意
13
结构体变量的成员名可以相同,但必须处在不同的层次。 例如:
sturct student { int no;
char name[20]; struct { int no; char classname[20]; }class; struct { int no; char groupname[20]; }group; }wang;
定义结构体类型名的同时定义结构体数组,例如:
struct student{…} stud[50];

第九章 结构体和共用体

第九章  结构体和共用体
• (*结构体指针变量).成员名 • 或者 • 结构体指针变量->成员名
– 【例9.5】用指向结构体变量的指针变量引用结构体变量
14
• (2)结构体数组的指针
– 结构体指针具有同其他类型指针一样的特征和使用方 法。结构体指针变量也可以指向结构体数组。同样结 构体指针加减运算也遵照指针计算规则。例如,结构 体指针变量加1的结果是指向结构体数组的下一个元素。 结构体指针变量的地址值的增量取决于所指向的结构 体类型变量所占存储空间的字节数。 – 【例9.6】有4名学生,每个学生的属性包括学号、姓名、 成绩,要求通过指针方法找出成绩最高者的姓名和成 绩。 – 程序设计分析:将学生信息存入数组中,通过指针依 次访问每一个学生信息,比较其分数,从而求出获得 最高分学生在数组中的位置。
– 在结构体变量定义之后对结构体变量赋值时可 以采用各成员赋值,用输入语句或赋值语句来 完成。 – 【例9.2】在定义后对结构体变量赋初值。 – 【例9.3】有两条记录,记录包括数量(num)和 价钱(price),编写一程序完成总价钱的计算。
11
9.2 结构体数组与结构体指针
9.2.1结构体数组
5
• ④结构体类型的定义只说明了该类型的构成形式,系统并 不为其分配内存空间,编译系统仅给变量分配内存空间 • ⑤结构体成员的类型也可以是另外一个结构体类型。如: 1. struct date 2. { int year; 3. int month; 4. int day; 5. }; 6. struct student 7. { 8. int num; 9. char name[20]; 10. char sex; 11. struct date birthday; 12. int score[5]; 13.}; • 结构体成员的类型如果是另外一个结构体类型,同样必须 遵守先定义后使用的原则。如上例中,先定义struct date类 6 型,再定义struct student类型。

结构体与共用体

结构体与共用体

4、共用体类型的变量如何赋初值,含义是什么?
不能对共用体变量名赋值,也不能在定义共用体变量时初始化。但可以用一个共用体变量为 另一个变量赋值
例:union
{ int i;
char ch;
double f;
}a={1,’a’,1.5}; ()
a=1;
()
m=a;
()
例:float x; union { int i; char ch; double f; }a,b; a.i=1; a.ch=‘a’; a.f=1.5; b=a; () x=a.f; ()
二. 枚举类型的应用
• 1.枚举类型变量的定义 ◆先定义枚举类型,再定义枚举类型变量
enum week{sun,mon,tue,wed,thu,fri,
sat};
enum week weekday,workday; ◆定义枚举类型的同时定义枚举变量 enum color {red,blue,green,black}a,b,c;
共用体类型的关键字
union 联合类型名 { 数据类型 成员名1 数据类型 成员名2
...........
数据类型 成员名n };
例:
union utype {
char ch; int i; float f; };
2、如何定义共用体类型的变量
(1)先定义类型,再定义变量,例如: union data /*共用体类型定义*/ { int i;
◆直接定义枚举变量 enum {male,female}sex1,sex2;
枚举类型变量的特点
例 enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN };
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。

C语言第9章结构体、共用体、枚举

C语言第9章结构体、共用体、枚举

结构体变量.成员
struct date { int year;
int month; int day;
“.”是成员运算符, 优先级最高
printf("%d,%d,%d",birth);
printf("%d,%d,%d",birth.year,
}; struct date birth;
birth.month,birth.day);
scanf("%f",&student2.score[2])7; 8
student2
结构变量的整体赋值 student3 = student2;
02 Zhang Zi Liang 88 78
student3
02 Zhang Zi Liang 88 78
湖南工业大学计算机与通信学院
例9-1学生的基本信息包括学号、姓名、3门成绩、平均分、总分。输入一 个学生的前3项基本信息,计算平均分和总分并输出。
湖南工业大学计算机与通信学院
9.1 问题的提出
又如,在学生信息管理系统中填 加个属性:是否是中共党员,如 果不是属性的值为0(int),如
果是属性的值为入党的时间 (char)。在某一时间,属性只有 一种值,而且数据类型不同,这 种情况用什么数据类型描述呢?
对于这种应用,C语言引入了共用体类型。
共用体是一种同一存储区域由不同类型变量共享的数据 类型,它提供—种方法能在同一存储区中操作不同类型 的数据,也就是说共用体采用的是覆盖存储技术,准许 不同类型数据互相覆盖。
基本数据类型并不能方便地解决所有问题
❖ 复合数据类型是基本数据类型迭代派生而来
典型的代表就是“结构”,数组、指针也可算作此类

《C语言程序设计与数据结构》课件第09章结构体与共用体

《C语言程序设计与数据结构》课件第09章结构体与共用体

C语言程序设计与数据结构
C编译程序按照每个成员在结构体中声明的顺 序一一对应赋值,不可以跳过前面的成员直接给后 面的成员赋值,但是可以只给前面若干成员赋值, 后面没有赋值的成员由系统赋予默认值。
C语言程序设计与数据结构
3.结构体变量的引用 (1) 一般结构体变量的引用 一般结构体变量的引用是通过成员运算符“.”来实 现的,形式如下: 结构体变量名.成员名
学习重点: 结构体的概念; 结构体成员的引用。
C语言程序设计与数据结构
结构体概念的引入 (为什么需要结构体?)
C语言程序设计与数据结构
已经学习过的数据类型: 整形、实型、字符型 ,另外还有数组。 问题: 以上数据类型和数组是否完全满足编程需要? (例如:如何定义一个工人变量?)
C语言程序设计与数据结构
C语言程序设计与数据结构
上述五个数据项组成了工人的整体,这就是一 个结构体类型的数据,我们可以给这个数据命名为 worker,只要是worker类型的数据,都包括这五个 数据项。
C语言程序设计与数据结构
9.1 结构体类型的说明
C语言程序设计与数据结构
结构体类型是包含若干个相同或不同数据类型数 据项的集合,我们把这些数据项称之为结构体成员, 声明结构体类型的一般形式为: struct 结构体标识名 { 数据类型名1 结构体成员名表1; 数据类型名2 结构体成员名表2; ..... 数据类型名n 结构体成员名表n; };
C语言程序设计与数据结构
与同一类型的普通变量一样,结构体变量中的各个成 员也可以进行相应的各种运算,如: worker1.sex =„F‟; worker1. age++; worker1.salary=3000f;

C语言程序设计第9章结构体与共用体简明教程PPT课件

C语言程序设计第9章结构体与共用体简明教程PPT课件

//书名 //作者 //出版社 //价格
【例9.2】定义一个结构体类型struct student,描 述学生的基本信息,包含学号、姓名、性别和成绩
struct student { int num; //学号 char name[20]; //姓名 char sex; //性别, M-男,F-女 float score; //成绩 };
第9章
结构体与共用体
第9类型,但在实际问题中, 数据要复杂一些,往往具有不同的数据项和类型: 例如: 图书基本信息 用户自定义 学生基本信息 数据类型 球赛基本信息 ……
方法:创建结构体类型、共用体类型(或称为联合 体类型)和枚举类型
C语言程序设计 第9章 结构体与共用体 2
9.1 结构体类型
整 型
单精度型float
基本类型
实型(浮点型)
双精度型double
字符类型char
C 数 据 类 型
数组 构造类型
结构体struct 共用体union 枚举类型enum 指针类型
本章所介绍 空类型void 的数据类型
C语言程序设计
数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作
C语言程序设计
定义了结构体类型: struct book 定义了结构体变量: book1,book2;
第9章 结构体与共用体
14
• 方式三:
定义无名结构体类型的同时定义结构体变量
struct { 成员列表 } 变量名列表; struct { char name[40]; char author[100]; char publish[100]; float price; }book1,book2; 说明:第三种方法,由于没 有给出结构体类型标识符, 在实际应用中,此方法往往 是一次性的,适用于定义临 时的局部变量或者嵌套的结 构体成员变量。

第9章 结构体、共用体和枚举类型

第9章 结构体、共用体和枚举类型
第9章 结构体、共用体和枚举类型
9.1 结构体类型与结构体变量 9.2 结构体数组 9.3 向函数传递结构体型数据 9.4 链表 9.5 共用体 9.6 枚举类型 9.7 用户自定义类型

9.1 结构体类型与结构体变量
• 结构体类型的定义
–概述:
• 建立单链表的主要步骤为:
– 生成只含有头结点的空链表; – 然后读取数据信息,生成新结点,将数据存放于新结点中, 插入新结点到单链表中 – 重复第二步,直到输入结束。 根据新结点插入到链表的位置的不同,建立链表的方式, 分为在表尾插入的方法和在表头插入的方法。 •表尾插入: 例9.6 •表头插入: 例9.7
• 共用体变量的定义
–用已定义的共用体类型去定义共用体变量 –定义共用体类型的同时定义变量: –定义无名共用体类型的同时定义变量:
• 共用体变量的引用
–引用方式:共用体变量名.成员名 共用体变量名. 共用体变量名 –说明: 对于共用体变量,只能引用它的成员,而不能引用整个 共用体变量。若共用体的成员是构造类型的,则需要逐级引 用至最低级的成员。 –能通过定义指向共用体的指针变量来引用共用体变量。
在实际应用中,一组相关的数据可能是不同类型的。C语 言提供了包含不同类型成员的类型来定义这样的数据,这 种类型就是结构体类型 结构体类型。 结构体类型
– 定义形式:
struct 结构体名 类型名1 成员名1 {类型名1 成员名1; 类型名2 成员名2 类型名2 成员名2; …… 类型名n 成员名n 类型名n 成员名n; };
• 举例
例9.11 上一页
9.6 枚举类型
• 枚举类型的定义–定义来自式:enum 枚举类型名{枚举常量1,枚举常量2,……,枚举常量n}; •

C语言程序设计——结构体和共用体(完整版)

C语言程序设计——结构体和共用体(完整版)

printf(“name\tage\tjob\tclass/office\n”); for(i=0;i<PN;i++) {if(body[i].job==„s‟) printf(“%s\t%d\t%3c\t%d\n”,body[i].name, body[i].age,body[i].job,body[i].units.class); else printf(“%s\t%d\t%3c\t%s\n”,body[i].name, body[i].age,body[i].job,body[i].units.office); } }
birthday num name sex age month day year addr
§12.3结构体数组
结构体数组的每一个元素都是具有相同结构类型 的结构体变量。 例:struct student {int num; char name[20]; float score; }stu[3]; 其中,定义了一个结构体数组stu,共有3个元素, 每个元素都具有struct student的结构形式。
§12.6共用体
共用体(也称为联合)也是一种构造的数据类型。 共用体是将不同类型的数据组织在一起共同占用 同一段内存的一种构造数据类型。 例如,在校学生和教师都填写以下表格: 姓名 年龄 职业 单位 其中,职业分两类:教师和学生; 而单位一栏里,学生填写班级编号(整型类型), 教师填写某系某教研室(整型类型) 。
§12.7枚举数据类型
当某些变量仅由有限个数据值组成时,通常用枚 举类型来表示。 所谓枚举是指将变量的值一一列举出来,变量的 值只限于列举出来的值的范围内。如一周只有7天, 一年只有12个月等等。
注意:枚举类型是一种基本数据类型,而不是一 种构造类型。关键字为enum。

c语言第九章结构体与共用体

c语言第九章结构体与共用体

4. 结构体类型的函数 例9.5 找出成绩最高的学生记录,学生记录由学号和成绩组 成。 #include “stdio.h” #define N 5 struct stu { char num[5]; float s; }; struct stu fun(struct stu a[]) { struct stu m=a[0]; int i; for(i=1;i<N;i++) if(m.s<a[i].s) m=a[i]; return m; }
1. 结构体变量初始化 所赋初值顺序放在一对花括号中,例如: struct student std={“LiMing”,‟M „,1962,5,10,88,76}; 注意: a按成员在结构体中的顺序一一对应 赋值。 b不允许跳跃式赋初值。 c未赋初值的数值型和字符型数据, 系统自动赋初值0。
2. 结构体数组初始化 由于数组的每一个元素都是一个结构体,因此通常将其成员的 值依次放在一对花括号中,以便区分各个元素。例如: struct bookcard { char num[5]; float money; }bk[3]={{“No1”,35. 5},{“No2”,25.0},{“No3”,66.7}}; /* bk[0] bk[1] bk[2] */ 3. 结构体指针初始化 结构体类型数据的指针与其它类型数据的指针初始化相同 例如:struct stu std,pers[3],*psd1=&std,*psd2=pers,(*p)[3]=&pers;
2. 传递结构体变量 形参结构体变量=实参结构体变量 例9.3 #include “stdio.h” struct ST { char str[20],int i;} void f(struct ST x) { printf(“%s %d\n”,x.str,x..i);} main() { struct ST t={“C language”,85}; f(t); } 程序运行结果为: C language 85

c语言9结构体与共用体

c语言9结构体与共用体

c语言9结构体与共用体九、结构体与共用体(一) 选择题1、C语言结构体类型变量在程序执行期间_________。

A.所有成员一直驻留在内存中B.只有一个成员驻留在内存中C.部分成员驻留在内存中D.没有成员驻留在内存中2、下面程序的运行结果是_________。

main(){struct cmplx{ int x;int y;}cnum[2]={1,3,2,7};printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}A.0 B.1 C.3 D.63、设有如下定义:struct sk{int n;float x;}data ,*p;若要使p指向data中的n域,正确的赋值语句是_________。

A.p=&data.nB.*p=data.n;C.p=(struct sk *)&data.nD.p=(struct sk *)data.n4、以下对结构体变量stu1中成员age的非法引用是_________。

struct student{int age;int num;}stu1,*p;p=&stu1A.stu1.ageB.student.ageC.p->ageD.(*p).age5、下面对typedef的叙述中不正确的是_________。

A.用typedef可以定义各种类型名,但不能用来定义变量B.用typedef可以增加新类型C.用typedef只是将已存在的类型用一个新的标识符来代表D.使用typedef有利于程序的通用和移植6、以下scanf函数调用语句中对结构体变量成员的不正确引用是_________。

struct pupil{char name[20];int age;int sex;}pup[5],*p;p=pup;A.scanf("%s",pup[0].name);B.scanf("%d",&pup[0].age);C.scanf("%d",&(p->sex));D.scanf("%d",p->age);7、若有以下说明和定义union dt{int a;char b;double c;}data;以下叙述中错误的是_________。

第9讲 结构体和共用体

第9讲 结构体和共用体

第九讲结构体和共用体9.1 概述迄今为止,我们已经介绍了基本类型(或称简单类型)的变量(如整型、实型、字符型变量等),也介绍了一种构造类型数据——数组,数组中的各元素是属于同一个类型的。

但是只有这些数据型是不够的。

有时需要将不同类型的数据组合成一个有机的整体,以便于引用。

这些组合在一个整体中的数据是互相联系的。

例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项。

这些项都与某一学生相联系,如图。

应当把它们组织成一个组合项,在一个组合项中包含若干个类型不同(当然也可以相同)的数据项。

C语言提供了这样一种数据结构,它称为结构体(structure)。

它相当于其它高级语言中的“记录”。

定义的类型如下:struct student{int num;char name[20];char sex;int age;float score;char addr[30];};上面定义了一个结构体类型,struct student(struct是关键字,不能省略),表示这是一个“结构体类型”。

它包括num,name,age,score,addr 等不同类型的数据项。

应当注意:struct student是程序设计者自己定义的类型名。

它和系统已定义了的标准类型(如int、char、float、double 等)一样可以用来作为定义变量的类型。

定义一个结构体类型的一般形式为:struct 结构体名{成员表列};花括弧内是该结构体中的各个成员(或称分量),由它们组成一个结构体。

例如,上例中的num,name,sex等都是成员。

对各成员都应进行类型说明,即类型标识符成员名也可以把“成员表列”称为“域表”。

每一个成员称为结构体中的一个域。

成员名命名规则与变量名命名规则相同。

“结构体”这个词是根据英文单词structure译出的。

许多C语言书把structure直译为“结构”。

9.2 结构体的定义、引用和初始化一、定义结构体类型变量的方法1、先定义结构体类型再定义变量名如:struct student{int num;char name[20];char sex;int age;float score;char addr[30];};struct student student1,student2;//表示定义两个struct student 类型的变量student1和student2.2、在定义类型的同时定义变量例如:struct student{ int num;char name[2];char sex;int age;float score;char addr[30];} student1,student2;它的作用与前面定义的相同。

C语言程序设计实例教程第2版习题答案作者李红第9章结构体和共用体.doc

C语言程序设计实例教程第2版习题答案作者李红第9章结构体和共用体.doc

9.4课后习题9.4.1项目练习一.练习目的1.进一步巩固结构体类型和共用体类型的定义与引川2.进一步复习链表的建立过程3.进一步巩固枚举类型的定义与枚举元索的引用方法二.练习内容1.用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点Z间的距离。

#include "stdio.h"include "math.h"struct pin{float x;float y;}a,b;main(){printfC*请输入a点的横纵坐标:“);scanf("%f%f"/&a.x,&a.y);printfC'Xn");printf("请输入b点的横纵坐标scanf(,,%f%f"/&b.x,&b.y);printf("\n n);printff"输出a、b 两点之间的距离是:%f",sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));getch();}2.16个同学围成一-圈,从笫1个人开始按1、2、3的顺序报号,凡报到3者退出圈子。

找出最后昭在圈子中的人原来的序号。

ttinclude "stdio.h"#include "stdlib.h"#define LEN sizeof(struct game)struct game{int num;struct game *next;};struct game *creat(){ struct game *head,*p;head=p=(struct game *) malloc(LEN);p->num=l;int i=2;while(i<=16){ p・>next=(struct game *) malloc(LEN);p->next-:>nu m=i;i++;p=p->n ext; }p->next=head; return(head);} struct game *delete(struct game *head) { struct game*pl=head,*p2=head,*x; int k=l;while(pl->next!=pl) {if(k==3) {x=pl; pl=pl->next;p2・>n ext=pl; free(x); x=NULL; k=0;} else {P2=pl; pl=pl->next;}pl->next=NULL;return(pl);}void print(struct game *head){ struct game *p;p=head;while(p!=NULL) {printf("%d\t",p->num);p=p->n ext;}printfCAn");}main(){ struct game *pt,*p;pt=creat();p=delete(pt);print(p);free(p);getch();}3.建立一个链表,每个结点包含的成员为:职工号、工资。

C语言程序设计教程第9章 结构体共用体PPT课件

C语言程序设计教程第9章 结构体共用体PPT课件

2020/7/30
10
举例:
定义结构体: struct stu
{ char num[20]; char name[20]; char sex; float score;
}; 声明结构体变量: struct stu student1, student2;
2020/7/30
11
② 声明结构体类型的同时定义结构体 变量
第9章 结构体、共用体
9.1 结构体类型概述
9.2 结构体类型变量的定义和引用
9.3 结构体数组
9.4 结构体与指针
9.5 结构体与函数
9.6 链表的基本操作
9.7 共用体类型数据的定义和引用
9.9 位运算和位段
9.10 自定义类型(typedef)
9.11 常见错误及改正方法
2020/7/30
1
整体 概述
struct 结构体名 {
成员表列 }变量名表列;
如: struct stu { char num[20];
char name[20]; char sex; float score; } student1, student2
2020/7/30
12
③ 直接定义结构体类型变量
struct { 成员表列 }变量名表列; 这种定义方法没有出 现结构体名,只能定义 变量一次。
表中,通常包括学在生C语的言中学称号为结、构姓体类名型、性别、年
龄、姓成名绩、年家龄庭性地别址民等族项文目化。程度数组住只址能按电序话号组码 织多字符个数同组 类整型型的字数符据字,符显然整我型 们不字符能数用组 一长个整数型
2020/7/30
4
组来存放这一组数据。
9.1.1 结构体类型定义
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

结构体成员可以是另一结构体变量
例:
student1
2010001 Li feng M 18 87 Beijing Month birthday Day year
struct date { int month; int day; int year; };
定义一个struct date结构体,它代表 日期包括三个成员, month(月)、day(日)、year(年)。
9.2 结构体成员的引用与结构体变量的初始化
9.2.1 结构体成员的引用
9.2.2 结构体变量的初始化
9.2 结构体成员的引用与结构体变量的初始化 9.2.1 结构体成员的引用
结构体成员引用有三种方式: (1) 用结构体成员运算符方式
即:结构体变量名. 成员名 。
(2) 用指针的方式 定义一个指针结(构体指针), 使它指向该结构体变量, 这时就可用指 针和成员名来引用结构体成员了。 (3) 用“->”指向运算符引用结构体成员
2010030 Chenming M 17 92 Beijing
成 员 的 数 据 类 型
struct student { long num; char name[20]; 结 char sex; 构 体 int age; 成 float score; 员 名 char addr[30]; }student1,student2, .. .. ;
用结构成员运算符“.”引用结构体成员 struct student stu1; struct student stu2; stu1.num=2010001; stu1.sex=„M‟;
“.” 结构体成员运算符
char sex;
int age; float score; char addr[30]; } stu1,stu2;
这种定义方法的特点是:不能在别处用来另行定义别的结构体变量,要 想定义就必须将struct { }这部分重写。
(3) 把定义和说明分开
其定义格式为:
struct 结构体名 { 结构体成员表; }; .. .. . [存贮类型] struct 结构体名 结构体变量名表;
例如: struct student { int num; 这种定义方法的特点是: char name[20]; 可把其结构体说明部分作为文件存放起来, char sex; 这样可借助于“#include”预编辑语句把它复 int age; 制到任何源文件中,用以定义同类型的其它 float score; 结构体变量。 char addr[30]; }; .. .. .. struct student student1,student2,student3;
例: struct student { long num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu1={2010001, “Li feng”, „M‟, 18, 87.0, “Beijing”};
结构体变量的定义应注意的几点:
1) 2) 3) 4) 5)
6) 7) 8)
注意结构体声明和结构体变量定义的区别。 每个结构体变量表示的是一组(域)成员(数据)。而不是一个 数据。 每个结构体中所有结构体变量的结构(类型)是一样的。 在一个结构体中可以定义多少个结构体成员。 结构体变量的定义一定要在结构体说明之后或与结构体说 明同时进行。 结构体变量一般不用register寄存器型的存储方式。 结构体变量中的成员可以单独使用,其作用和地位与一般 变量相同。 结构体变量占用实际内存的大小可用sizeof( )运算来实现。 即:sizeof(结构体名)。
为被定义的结构体变量分配内存单元, 而结构体说明不分
配内存。
3、结构体变量定义格式 结构体变量定义的三种形式: (1) 在结构体说明的同时定义结构体变量 其定义格式为: struct 结构体名 {
结构体成员表;
} 结构体变量名表;
例如: struct student { int num; char name[20]; 该例结构体名为student,用它定义了三个结构 char sex; 体变量student1、student2、student3,三个变 int age; 量具有相同的组成结构体,即相同的类型。 float score; char addr[30]; }student1,student2,student3;
《C语言程序设计》
第9章
结构体与共用体
《C语言程序设计》
第九章
结构体和共用体
第9章
结构体和共用体
9.1 结构体的说明和定义
9.2 结构体成员的引用与结构体变量的初始化
9.3 结构体数组
9.4 结构体指针
9.5 结构体在函数间的传递
9.6 结构体型和结构体指针型函数
9.7 共用体简介 9.8 枚举类型 9.9 用typedef定义类型
NAME Li feng Wang bing … Chen ming
SEX M M … M
AGE 18 18 … 17
SCORE 76 89 … 86
ADDR Beijing Beijing … Beijing
结构体名
结构体类型标识符
student1 student2 … student30
2010001 2010002 … 1 Lifeng Wangbin … g M M … 18 18 … 87 79 … Beijing Beijing …
stu1.age=18;
stu1.score=87; Strcpy(stu1.addr,“Beijing”);
结构体成员引用的几点说明: 用结构体成员运算符 (1) 结构体成员运算符“.”的优先级最高,结合性为左结合(从左至右)。 例:stu1.num 作为一个整体来看待,并对其操作。
*stu1.num
9.1 结构体的说明和定义
9.1.1 结构体的概念
9.1.2 结构体的说明
9.1.3 结构体变量的定义
9.1 结构体的说明和定义
9.1.1 结构体的概念
结构体是不同数据类型的数据的集合。 结构体是构造类型的数据。 在程序的设计中, 会遇见一些关系密切、具有内在联系而且数据类型 不同的数据。例如, 一个班、一个年级或全校学生的学籍卡包括:他们 的学号、姓名、性别、年龄、学习成绩、地址.. ..等。这些数据有的是 数字、有的是字符,其数据类型不同, 对于这样一类数据可以用结构体 来处理。
9.2.2 结构体变量的初始化
结构体变量的初始化,就是在定义结构体变量的同时,对其成员赋 初值。规定,只准许对外部和静态结构体变量进行初始化,不能对自 动类型的结构体变量初始化。 结构体变量初始化的格式: struct 结构体名 结构体变量名={ 初始数据 };
对结构体变量初始化应注意几点:
(1)只能对存储类型为extern外部型和static静态型结构体变量初始化, 不能对存储类型为auto自动型的结构体变量初始化。 (2)初始化数据与数据之间用逗号隔开。 (3)初始化数据的个数要与被赋值的结构体成员的个数相等。 (4)初始化数据的类型要与相应的结构体成员的数据类型一致。 (5)不能直接在结构体成员表中对成员赋初值。
由于结构体是由不同数据类型的数据组成的集合体。它包含若干 成员。因此, 在使用结构体进行数据处理时, 首先应对结构体的组成进
行描述。这种描述称为结构体说明。
结构体说明实质上是构造一个结构体。说明的是结构体是由哪 些成员组成以及成员的数据类型。 struct 结构体名 { 结构体成员表; };
结构体说明的格式:
这种定义方法的特点是:定义一次结构体变量之后,在该定义之后的 任何位置还可用该结构体类型来定义其它结构体变量。
(2) 直接定义结构体变量
其定义形式为: 不出现结构体名
struct { 结构体成员表; } 结构体变量名表;
例如: struct 不出现结构体名 { int num; char name[20]; char sex; int age; 这里定义了三个结构体变量与(1)相同。 float score; 这种定义方法的特点是: char addr[3t3;
“.”优先于“*”,其等效为 *(stu1.num)。
其含义为访问stu1.num(所指地址中的内容)的目标变量。
(2) 不能将一个结构体变量作为一个整体加以引用。
例:printf(“%d,%s,%c,%d,%f,%s”,stu1); × (3) 对结构体成员的操作与其它变量一样,可进行各种运算。 赋值运算: stu1.score=stu2.score; 算术运算: sum=(stu1.score+stu2.score)/2; 自加减运算:stu1.age++; ++stu1.age; 关系运算: stu1.age>=stu2.age;
NUM 2010001 2010002 … 2010030
NAME Li feng Wang bing … Chen ming
SEX M M … M
AGE 18 18 … 17
SCORE 76 89 … 86
ADDR Beijing Beijing … Beijing
9.1.1 结构体的概念
结构体名 每一个结构体有一个名字, 所有成员都组织在该名字之下。
struct student 在定义struct student 结构体时, { long num; 成员birthday被定义struct date类型。 char name[20]; 即结构体成员为另一结构体变量。 已定义的(结构)类型struct date char sex; 与其他类型(int 、char)一样可以用来 int age; 定义结构体成员的类型。 float score; char addr[30]; struct date birthday; };
相关文档
最新文档