结构体和共用体演示文稿
合集下载
高中信息技术 信息学奥赛C语言第十三章 结构体与共用体课件

(1)若要引用结构体变量s1中的age成员, 可写作:s1.age;ps->age;(*ps).age; (2)引用结构体数组元素的成员,可写成 s[0].age.在这里,s数组的每一个元素可 以简单地看做是一个结构体变量。 (3)访问结构体中的数组成员,比如访 问s1中的grade数组,则可以写成 s1.grade[0]。 (4)若结构体中的字符数组存放的是字 符串,则可以对其数组名直接引用,如 、ps->name等。 (5)嵌套定义的结构体变量成员的引用: 在结构体说明中,某成员变量又是一个 结构体变量,若要引用其成员,可以一 级一级的找到最低一级的成员。
在这里由车牌、车名、型号、车速共同构成了 对一辆轿车的描述,在数据处理中,这四个属性 应该当作一个整体来处理。但它们不属于同一类 型,无法用数组来容纳,而用单个变量来分别代 表各个属性,又难以反映出它们的内在联系。
C语言提供结构体(structure)数据结构,将不同数 据类型、但相互关联的一组数据,组合成一个有 机整体使用。
(4)向函数传递结构体变量成员的地址 例13.11
(5)函数的返回值可以是结构体类型或返回值是指 向结构体变量的指针,即当做基本类型看待。
13.2.6 用结构体构成链表
(1)结构体中含有指向本结构体类型的指针成员。结 构体中的成员可以是各种类型的数据。那么,当结构
体中有一个或多个成员指针,且它们的基类型就是本
struct memb
1001
{ float v;
sa1占7个字
v
int n;
节内存空间
char c;
1005
n
} sa1;
1007
c
union memb
{ float v; usa2占4个字 2001
C语言程序设计结构体共用体及位运算PPT课件

个结构。成员可以在程序中单独使用,与普通变量完全相同。表示结构变量
成员的一般形式是:
•
结构变量名.成员名
•
例如:
•
jilu1.bianhao
/*记录1的编号
*/
• */
•
jilu2.xingbie
这有点像数据库中的字段。 第5页/共38页
/*记录2的性别
• 12.1.4 结构变量的赋值
• 完成。
结构变量的赋值就是给各成员赋值。可用输入语句或赋值语句来
放一个英文字母或符号,一个汉字通常要用两个字节来存储。每一个字节都
有自己的编号,叫做“地址”。一个字节由若干位(位的英文是bit)组成。
至于一个字节由几个位组成,取决于计算机的硬件系统。一般由8位、16位
或32位组成,所对应的计算机也被称为“8位机、16位机或32位机”。目
前微机以16位机或32位机为主。但在本书中作为原理讲述的是8位机。
•
我们把若干字节组成一个单元,叫做“字”(英文为word)。
一个字可以存放一个数据或指令。
第20页/共38页
• 2 原码
•
我们知道,计算机使用的是二进制数。但这些数据有不同的编码
方式,分别有原码、反码和补码。
•
以8位计算机系统为例,我们把最高位(即最左面的一位)留做
表示符号,其他7位表示二进制数,这种编码方式叫做原码。最高位为“0”
•
示例:如x=01010011,y=x>>2,则
y=00010100。
•
注意,左移会引起数据的变化,具体说,左移一位相当于对原来
的数值除以2。左移n位相当于对原来的数值除以2n。
• 4 按位与
第9章 结构体与共用体 教学PPT

9.1 结构体类型和结构体变量
• 9.1.2 结构体变量的定义
− 上个小节只是定义了结构体类型,它相当于一个模型,其中并无具体数 据,系统也不会为它分配实际的内存空间。为了能在程序中使用结构体 类型的数据,应该定义结构体类型的变量,并在其中存放具体的数据。
1.先定义结构体类型,再定义结构体变量 2.在定义结构体类型的同时定义结构体变量 3.直接定义结构体变量
9.7 进阶案例
• 求学生平均成绩
− 学习完了结构体与共用体的相关知识,接下来通过一个计算平均成绩 的案例来加深对结构体的理解,具体需求如下:
• 一个小组中有3个学生,每个学生修4门课程(三个学生修的课程 相同)
• 在程序中输入这3个同学的4门课程成绩,程序能自动计算出这4门 课程的小组平均成绩。
− 结构体变量作为函数参数的用法与普通变量类似,都需要保证调用函 数的实参类型和被调用函数的形参类型相同。结构体变量作函数参数 时,也是值传递,被调函数中改变结构体成员变量的值,主调函数中 不受影响。
9.4 结构体类型数据 在函数间的传递
• 9.4.2 结构体数组作为函数参数
− 函数间不仅可以传递一般的结构体变量,还可以传递结构体数组。接 下来,通过一个案例来演示如何使用结构体数组作为函数参数传递数 据,如例9-9所示。
结构体是一种构造数据类型,把不同类型的数据整 合在一起,每一个数据都称为该结构体类型的成员。
9.1 结构体类型和结构体变量
• 9.1.1 结构体类型定义
− 在程序设计中,使用结构体类型时,首先要对结构体类型的组成进 行描述,结构体类型的定义方式如下:
struct 结构体类型名称 {
数据类型 成员名1; 数据类型 成员名2; … 数据类型 成员名n; };
精品《C语言程序设计》PPT课件第11章 结构体与共用体

11.2
定义结构体类型变量的方法
嵌套的结构:
struct date { int month; int day; int year; };
struct{ int num; char name[20]; char sex; struct date birthday; float score; }boy1,boy2;
11.4结构体变量的赋值
boy1.num=102; ="Zhang ping"; printf("input sex and score\n"); scanf("%c %f",&boy1.sex,&boy1.score); boy2=boy1; printf("Number=%d\nName=%s\n",boy2.num,boy2. name); printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score); }
11.2
定义结构体类型变量的方法
(1)先定义结构,再说明结构变量。
也可以用宏定义使一个符号常量来表示一个结构类型。
例如:#define STU struct stu STU { int num; char name[20]; char sex; float score; }; STU boy1,boy2;
和定义结构体变量的方法相仿,只需说明为数组即 可,例如:
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu[3];
四川大学《c语言程序设计》课件-第8章 结构体与共用体

男 1999
90 83 72 82
2 林平之
男 1999
78 92 88 78
3 岳灵珊
女 1999
89 72 98 66
4 任盈盈
女 1999
78 95 87 90
结构体的解决方法
struct STUDENT
{ int studentID;
/*每个学生的序号*/
char studentName[10];/*每个学生的姓名*/
};
结构体变量的指针
struct STUDENT
{
int
studentID;
char
studentName[10];
char
studentSex[4];
struct date timeOfEnter;
int
scoreComputer;
int
scoreEnglish;
int
scoreMath;
int
结构体的内存占用
double 占用内存字节数 = 8 struct 类型用内存字节数 = ? 是所有成员变量的内存总和吗?
用运算符sizeof获得结构体大小 sizeof(变量或表达式) sizeof(类型)
struct number
{ short i; char ch;
float f;
};
printf("%d\n", sizeof(struct number));
struct STUDENT *pStu; /*定义结构体指针*/
pStu = &stu;
通过stu和成员运算符访问结构体成员
– stu. studentID = 1;
通过pStu和指向运算符访问结构体成员
90 83 72 82
2 林平之
男 1999
78 92 88 78
3 岳灵珊
女 1999
89 72 98 66
4 任盈盈
女 1999
78 95 87 90
结构体的解决方法
struct STUDENT
{ int studentID;
/*每个学生的序号*/
char studentName[10];/*每个学生的姓名*/
};
结构体变量的指针
struct STUDENT
{
int
studentID;
char
studentName[10];
char
studentSex[4];
struct date timeOfEnter;
int
scoreComputer;
int
scoreEnglish;
int
scoreMath;
int
结构体的内存占用
double 占用内存字节数 = 8 struct 类型用内存字节数 = ? 是所有成员变量的内存总和吗?
用运算符sizeof获得结构体大小 sizeof(变量或表达式) sizeof(类型)
struct number
{ short i; char ch;
float f;
};
printf("%d\n", sizeof(struct number));
struct STUDENT *pStu; /*定义结构体指针*/
pStu = &stu;
通过stu和成员运算符访问结构体成员
– stu. studentID = 1;
通过pStu和指向运算符访问结构体成员
C语言程序设计PPT课件第12章 结构体和共用体

2/60
12.1从基本数据类型到抽象数据类型
二进制数——类型本不存在 – 内存里存的内容,你认为它是什么,它就
是什么
– 在早期的机器指令及汇编语言中,数据对
象均用二进制数表示,没有类型的概念
一般的CPU只支持两种类型 – 整数、浮点数
2020/2/21
3/60
12.1从基本数据类型到抽象数据类型
12
2020/2/21
21/60
12.2.7结构体所占内存的字节数
ch
f
ch
ch
f
ch12个字节
事实上,所有数据类型在内存中都是从偶数地址开始存放的
且结构所占的实际空间一般是按照机器字长对齐的
不同的编译器、平台,对齐方式会有变化
结构体变量的成员的存储对齐规则是与机器相关的
具有特定数据类型的数据项大小也是与机器相关的
25/60
12.4结构体指针的定义和初始化
如何定义指向结构体变量的指针?
pt STUDENT stu1; STUDENT *pt; pt = &stu1;
等价于
STUDENT *pt = &stu1;
stu1 成员1 成员2 成员3 成员4
在高级语言引入了基本数据类型 – 整型、浮点型、字符型等 – 不同语言会定义不同的基本类型 – 基本数据类型并不能方便地解决所有问题
有些语言(如PL/1)中试图规定较多的类型, 如数组、树、栈等,但实践证明不是个好办法
2020/2/21
4/60
12.1从基本数据类型到抽象数据类型
用户自己构造数据类型-复合数据类型 – 由基本数据类型迭代派生而来,表示复杂的数据对象
2020/2/21
第八章 结构体和共用体-2004PPT教学课件

第八章 结构体和共用体
8.1结构体类型的定义 8.2结构体类型变量的定义和引用 8.3结构体类型数组 8.4指向结构体类型数据的指针 8.5共用体类型 8.6枚举类型 8.7用类型是“构造类型”,它是由 若 干个类型相同或不同的数据组合而成的,前面已经介绍过的 数组就是一种构造类型,但是它只有存放数据类型相同的若 干个数据,如果出现数据类型不同的若干个数据,用单个数 组就无法将它们存放在一起为了整体存放这些类型不同的相 关数据,C语言提供了另一种构造类型:结构体类型,它可 以将若干个不同类型的数据存放在一起。
例如,为了存放一个人的姓名、性别、年龄、工资, 可以定义如下的结构体类型: struct person
{ char name[20]; char sex; int age; float wage;
};
6
又如,为了存放一个学生的学号、姓名、性别、年龄、 成绩1、成绩2、成绩3,可以定义如下的结构体类型: struct stu
9
在定义变量的同时,可以对变量赋初值,例如上例中的 定义语句可以改写如下:
struct student x={100001L,"zhao1",'f',{89,94,86}}, y={100002L,"zhao2",'m',{78,86,92}};
这个定义语句将使得变量x和y的各个成员获得如下的初值: number name sex score[0] score[1] score[2]
8
返回
结构体类型变量的定义和引用
一、结构体类型变量的定义和初始化
1、先定义结构体,后定义变量 例如,为学生信息定义2个变量,程序段如下:
struct student {long number; char name[20]; char sex; float score[3]; }; ... struct student x,y;
8.1结构体类型的定义 8.2结构体类型变量的定义和引用 8.3结构体类型数组 8.4指向结构体类型数据的指针 8.5共用体类型 8.6枚举类型 8.7用类型是“构造类型”,它是由 若 干个类型相同或不同的数据组合而成的,前面已经介绍过的 数组就是一种构造类型,但是它只有存放数据类型相同的若 干个数据,如果出现数据类型不同的若干个数据,用单个数 组就无法将它们存放在一起为了整体存放这些类型不同的相 关数据,C语言提供了另一种构造类型:结构体类型,它可 以将若干个不同类型的数据存放在一起。
例如,为了存放一个人的姓名、性别、年龄、工资, 可以定义如下的结构体类型: struct person
{ char name[20]; char sex; int age; float wage;
};
6
又如,为了存放一个学生的学号、姓名、性别、年龄、 成绩1、成绩2、成绩3,可以定义如下的结构体类型: struct stu
9
在定义变量的同时,可以对变量赋初值,例如上例中的 定义语句可以改写如下:
struct student x={100001L,"zhao1",'f',{89,94,86}}, y={100002L,"zhao2",'m',{78,86,92}};
这个定义语句将使得变量x和y的各个成员获得如下的初值: number name sex score[0] score[1] score[2]
8
返回
结构体类型变量的定义和引用
一、结构体类型变量的定义和初始化
1、先定义结构体,后定义变量 例如,为学生信息定义2个变量,程序段如下:
struct student {long number; char name[20]; char sex; float score[3]; }; ... struct student x,y;