结构体数据类型与链表.ppt
《结构体数据类型与链表.ppt》由会员分享,可在线阅读,更多相关《结构体数据类型与链表.ppt(45页珍藏版)》请在三一文库上搜索。
1、C语言程序设计教程,1,2019/4/13,9.1 结构体类型的定义 9.2 结构体类型变量 9.3 结构体类型数组 9.4 结构体类型指针 9.5 结构体与函数 9.6 链表,第九章 结构体数据类型与链表,C语言程序设计教程,2,2019/4/13,9.1 结构体类型的定义,1. 结构体类型的定义 struct 结构体名 类型标识符1 成员名1; 类型标识符2 成员名2; 类型标识符n 成员名n; ; struct 结构体名 结构体类型名,结构体是由C语言中的基本数据类型构成的、并用一个标识符来命名的各种变量的组合,其中可以使用不同的数据类型。,C语言程序设计教程,3,2019/4/13,2
2、、关于结构体类型的说明: “struct 结构体名”是一个类型名,它和int、 float等作用一样可以用来定义变量。 结构体名是结构体的标识符不是变量名,也不是类型名。 构成结构体的每一个类型变量称为结构体成员, 它象数组的元素一样, 但数组中元素以下标来访问的, 而结构体是按结构体变量名来访问成员的。 结构体中的各成员既可以属于不同的类型,也可以属于相同的类型,而数组中的元素是属于同一类型的。 成员也可以是一个结构体类型,如:,C语言程序设计教程,4,2019/4/13,struct date int month; int day; int year; ;,struct person fl
3、oat num; char name20; char sex; int age; struct date birthday; char address10; ;,C语言程序设计教程,5,2019/4/13,9.2 结构体类型变量,9.2.1 结构体类型变量的定义 1.先定义结构体类型,再定义结构体变量 ,形式: struct 结构体名 类型标识符 1 成员名1; 类型标识符2 成员名2; 类型标识符n 成员名n; ; struct 结构体名 变量名表;,例如: struct student char name20; char sex; int age; float score; ;,struc
4、t student stu1,stu2;,C语言程序设计教程,6,2019/4/13,2.在定义结构体类型的同时定义变量,形式: struct 结构体名 类型标识符 1 成员名1; 类型标识符2 成员名2; 类型标识符n 成员名n; 变量名表;,例如: struct student char name20; char sex; int age; float score; stu1,stu2;,C语言程序设计教程,7,2019/4/13,3. 用匿名形式直接定义结构体类型变量,形式: struct 结构体名 类型标识符 1 成员名1; 类型标识符2 成员名2; 类型标识符n 成员名n; 变量名表
5、;,例如: struct char name20; char sex; int age; float score; stu1,stu2;,C语言程序设计教程,8,2019/4/13,9.2.2 结构体变量的使用,结构体是一种新的数据类型, 因此结构体变量也可以象其它类型的变量一样赋值、运算, 不同的是结构体变量以成员作为基本变量。 结构体成员的表示方式为: 结构体变量名.成员名 其中的圆点运算符称为成员运算符,它的运算级别最高。 如果将“结构体变量名.成员名“看成一个整体,则这个整体的数据类型与结构体中该成员的数据类型相同, 这样就可象前面所讲的变量那样使用,但应遵循以下规则:,C语言程序设计
6、教程,9,2019/4/13,(1)不能将一个结构体变量作为一个整体进行输入和输出,而只能对结构体变量中的各个成员分别进行输入和输出。,struct date int month; int day; int year; day; scanf(“%d%d%d”,day); (错误) scanf(“%d%d%d”, (正确),C语言程序设计教程,10,2019/4/13,(2)如果成员本身又属一个结构体类型,则要用若干个成员运算符(.),一级一级地找到最底的一级的成员,只能对最底级的成员进行赋值或存取运算.,struct date int month; int day; int year; ,st
7、ruct student long num; char name20; char sex; int age; struct date birthday; char depart10; stu1;,如:stu1.birthday.year=2004; stu1.birthday.month=12;,(3)对结构体变量的成员可以像同类型普通变量一样进行各种运算。,C语言程序设计教程,11,2019/4/13,9.2.3 结构体变量的初始化与存储,结构体变量的初始化:在定义结构体变量的同时 给它赋以初值。 ,struct student char name20; char sex; int age;
8、 float score; stu1,stu2=“Wangwu”,m,20,88.5;,C语言程序设计教程,12,2019/4/13,2.结构体变量存储分配示意图,C语言程序设计教程,13,2019/4/13,9.3 结构体数组,9.3.1 结构体数组的定义 结构体是一种新的数据类型, 同样可以有结构体数组。 1、结构体数组的定义 结构体数组就是具有相同结构体类型的变量集合。,假如要定义一个班级105个同学的学号、姓名、性别、年龄, 可以定义成一个结构体数组。如下所示: struct long num; char name20; char sex; int age; stu105;,C语言程序
9、设计教程,14,2019/4/13,struct student long num; char name20; char sex; int age; float score; char add5; stu3= 101,”WGJ”,M,28,88.5,”CS”, 102,”DYH”,F,26,88.0,”CS”, 103,”DYC”,M,24,78.5,”CS” ;,9.3.2 结构体数组变量的初始化 一般形式是在定义的数组后面加上 =初值表列;,数组各元素在内存中连续存放,结构体数组成员的访问是以数组元素为结构体变量的, 其形式为:结构体数组元素名.成员名 如:stu2.age 结构体数组的成
10、员也可以是数组。 struct student long num; char name20; char sex; int age; float score3; char add5; stu5;,9.3.3 结构体数组的使用,例9.1 候选人得票的统计。设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。,C语言程序设计教程,17,2019/4/13,struct person char name20; int count; leader3=“Zhang“,0,“Li“,0,“Wang“,0; main() int i,j; char leader_name20; for
11、(i=1;i=10;i+) scanf(“%s“,leader_name); for (j=0;j3;j+) if (strcmp(leader_name,leaderj.name)=0) leaderj.count+; printf(“n“); for (i=0;i3;i+) printf(“%5s:%dn“,leaderi.name,leaderi.count); ,C语言程序设计教程,18,2019/4/13,9.4 结构体类型指针,一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以定义一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。,9.4.1
12、 指向结构体变量的指针,1.指向一个结构体变量的指针定义形式: struct 结构体名 *指针变量名; 例如:struct student long int num; char name20; char sex; float score; ;,C语言程序设计教程,19,2019/4/13,2.由指向结构体的指针变量引用结构体成员的形式为: (*指针变量名).成员名 或 指针变量名-成员名 -为指向运算符 如:上面示例用指针变量引用其成员的方式为: (*pstu).num ,(*pstu).name (*pstu).sex ,(*pstu).score 可以等价表示为: pstu-num, ps
13、tu-name,pstu-sex, pstu-score,struct student *pstu, stu; pstu= /*不要认为结构体变量名代表起始地址*/,C语言程序设计教程,20,2019/4/13,例9.2 比较结构体成员的几种引用方式 #include “string.h“ main() struct student long int num; char name20; char sex; float score; ; struct student stu_1; struct student *p;,C语言程序设计教程,21,2019/4/13,p= ,C语言程序设计教程,22
14、,2019/4/13,9.4.2 指向结构体数组元素的指针,一个指针变量可以指向一个结构体数组元素(将该结构体数组的数组元素地址赋给此指针变量)。例如: struct int a; float b; arr3,*p; p=arr; 此时使p指向arr数组的第一个元素,“p=arr;”等价于“p=”则此时指针变量p此时指向arr1。,C语言程序设计教程,23,2019/4/13,例9.3 输出数组中各元 素中各成员的值。 struct student int num; char name20; char sex; int age; ; struct student stu3=,10101,“Zh
15、ang“,M,18, 10102,“Li“,M,19, 10103,“Wang“,F,20 ;,main() struct student *p; printf(“ No. Name sex agen“); for (p=stu;pnum,p-name,p-sex, p-age); ,C语言程序设计教程,24,2019/4/13,指针移动示意图:,stu0,stu1,stu2,P,P,P”,20,F,“Wang“,10103,19,M,“Li“,10102,18,M,“Zhang“,10101,C语言程序设计教程,25,2019/4/13,注意: 如果p的初值为stu,即指向第一个元素,则p+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 数据类型
链接地址:https://www.31doc.com/p-2587393.html