C语言程序设计第7章.ppt_第1页
C语言程序设计第7章.ppt_第2页
C语言程序设计第7章.ppt_第3页
C语言程序设计第7章.ppt_第4页
C语言程序设计第7章.ppt_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章结构和共享,返回总目录,目录,7.1结构类型,7.2共享类型,7.3枚举类型,7.5自定义类型,7.4位字段,返回总目录,7.6练习7,基本要求:)熟悉结构类型的定义和使用;熟悉常用类型的定义和使用;)掌握枚举类型、位字段和自定义类型的定义和使用。学习要点:)结构类型的定义和使用;)自定义类型的定义和使用;7.1结构类型、7.1.1结构类型的定义、初始化和引用,并返回目录。在日常生活中,我们经常会遇到一些需要填写的登记表,比如成绩单和邮寄地址,如图7.1所示。这些表包含各种标准类型的数据,这些数据不能用以前学过的任何数据类型来完全描述。因此,C语言引入了一种数据类型结构,可以将不同的数据

2、类型集成到一个数据类型中。图7.1,结构类型的定义,7.1结构类型,7.1.1结构类型的定义、初始化和引用。定义结构类型的一般形式是:结构结构名称类型成员名称1;类型成员名称2;括号中是结构类型的成员(或组件),它是一组系统标准变量类型,它们形成一个结构类型。如果成员的集合称为“域表”,那么每个成员都称为一个域。成员的命名规则与标准变量的命名规则相同。结构类型的定义、7.1结构类型、7.1.1结构类型的定义、初始化和引用,例如,地址簿的结构类型定义为:结构地址字符名称20;/* name */char department 30;/*部门*/char地址30;/* address */long

3、 int zip;/*邮政编码*/long int电话;/*电话号码*/char email 30;/*电子邮件*/;结构类型的定义、7.1结构类型、7.1.1结构类型的定义、初始化和引用。同样,抄本的内容可以用另一种结构类型表示:结构分数char grade20/* class */长整数;/*学生id */char name 20;/*姓名*/char性别;/*性别*/浮动。/*数学分数*/浮点数据库;/*数据库分数*/浮动英语;/*英语成绩*/;结构类型的定义,7.1结构类型,7.1.1结构类型的定义,初始化和引用,结构类型变量的定义(三种方式),先定义结构类型再定义变量名称,其一般形式

4、是:结构结构名称类型成员名称1;类型成员名称2;结构名结构变量名表;例如:struct score char grade20长整数;char name20迷人的性爱;浮动数学;浮动数据库;浮动英语;struct score stu1,stu27.1结构类型,7.1.1结构类型的定义、初始化和引用,(2)定义类型时定义变量这是一个双重定义,其一般形式是:结构结构名称类型成员名称1;类型成员名称2;结构变量名列表;例如:struct score char grade20长整数;char name20迷人的性爱;浮动数学;浮动数据库;浮动英语;stu1,stu2,结构类型变量的定义(3种方式),7.

5、1结构类型,7.1.1结构类型的定义、初始化和引用,(3)结构类型变量的直接定义如果只需要结构变量,定义时可能不会出现结构名称。它的一般形式是:结构类型成员名称1;类型成员名称2;结构变量名列表;例如:struct char grade20长整数;char name20迷人的性爱;浮动数学;浮动数据库;浮动英语;stu1,stu2,结构类型变量的定义(三种方式),7.1结构类型,7.1.1结构类型的定义、初始化和引用。在上述三个例子中的结构变量stu1和stu2被定义之后,它们具有由结构类型struct得分定义的结构。如图7.2所示。(假设图中结构变量各成员的值)、结构类型变量的定义(3种方式

6、)、7.1结构类型和7.1.1结构类型的定义、初始化和引用。编译时,空间不分配给结构类型,而只分配给结构变量。Turbo C编译器将自动为结构变量的每个成员变量分配适当的内存区域。结构变量stu1的内存分配(假设字符占用1个字节,整数占用21个字节)如表7.1所示。结构类型变量的定义(3种方式),7.1结构类型,7.1.1结构类型的定义、初始化和引用,结构变量的引用规则,(1)成员访问。对结构变量中每个成员的访问由运算符“”表示。其格式为:结构变量名。成员名称运算符“”。称为成员运算符,具有最高优先级。c允许直接分配给结构变量成员,但不能作为一个整体输入和输出结构变量。例如,如果系统已经被定义

7、为如图7.2所示,用于将30301分配给其结构变量stu1中的数字成员的正确语句是stu1。数字=30301;下列语句是错误的:scanf (%s,% LD,%s,% c,% f,% f,% f,7.1结构类型,7.1.1结构类型的定义、初始化和引用,(2)成员变量可以作为普通变量操作。以下操作是正确的:stu 1 . number;stu 1 . number;注意:stu1.number操作是对stu1中的数字的自加操作,而不是先对stu1的自加操作。结构变量引用规则,7.1结构类型,7.1.1结构类型的定义、初始化和引用,(3)可以引用成员或结构变量的地址。例如,对于图7.2所示的结构类

8、型:scanf(%ld),/*输出stu1 *的第一个地址/结构变量的地址主要用作传递结构地址值的函数参数。结构变量引用规则,7.1结构类型,7.1.1定义,结构类型的初始化和引用,结构变量的初始化,可以在定义结构变量的同时初始化结构变量的每个成员。初始化时注意数据类型的一致性。7.1结构类型,7.1.1结构类型的定义、初始化和引用,示例7.1定义结构类型时定义和初始化结构变量。# include struct addr char name20收费部门30;char地址30;long int zip长途国际电话;char email30甲=刘林,数学,黄贝路17号,100008,856432,

9、LL;main() printf(名称:% sn department :% SNA address :% sn,,a.department,a . address);printf(zip :% ldn phone :% ldnemail :% sn,a.zip,a.phone,a . email);结构变量的初始化,7.1结构类型,7.1.1结构类型的定义、初始化和引用,例7.2,首先定义结构类型,然后定义和初始化结构变量。#include main()结构addr char name20char部门30;char地址30;long int zip长途国际电话;char emai

10、l30;刘林,数学,黄贝路17号,10008,856432;printf(名称:% sn department :% SNA address :% sn,,a . exit,a . address);printf(zip :% ldn phone :% ldnemail :% sn,a.zip,a.phone,a . email);结构变量初始化、7.1结构类型、7.1.2结构类型数组和1。结构数组定义类似于定义结构变量的方法,只需要说明结构数组是一个数组。例如,定义一个可以存储35名学生的地址簿结构数组。格式1是:结构地址字符名称20;char部门30;char地址30;long

11、 int zip长途国际电话;char email30;结构地址stu35,7.1结构类型,7.1.2结构类型数组。类似于定义结构变量的方法,结构数组只需要被描述为一个数组。例如,定义一个可以存储35名学生的地址簿结构数组。格式2是:结构地址字符名称20;char部门30;char地址30;long int zip长途国际电话;char email30stu35,1。结构数组定义,7.1结构类型,7.1.2结构类型数组,类似于定义结构变量的方法,结构数组只需要描述为一个数组。例如,定义一个可以存储35名学生的地址簿结构数组。格式3是:结构字符名20;char部门30;char地址30;long

12、 int zip长途国际电话;char email30stu351.结构数组定义,7.1结构类型,7.1.2结构类型数组,2。结构数组的初始化。示例1在定义结构类型的同时定义并初始化结构数组。# include struct addr char name20收费部门30;char地址30;long int zip长途国际电话;char email30stu3=刘林,数学,黄贝路17号,100008,856432,黄路LL,办公室,118横环路,100070,833932,“黄_L”,王敏,设计,1010中山路,400030,674322,王;7.1结构类型,7.1.2结构类型数组。示例2首先定

13、义结构类型,然后定义并初始化结构数组。# include struct addr char name20收费部门30;char地址30;long int zip长途国际电话;char email30;刘林,数学,黄贝路17号,100008,856432,黄路100030,黄路100070,833932,王敏,设计,中山路1010号,400030,674322,王;2。结构数组初始化,7.1结构类型,7.1.3指向结构类型数据的指针,1。指向结构变量的指针,(2)指向结构类型变量的指针变量的定义:结构结构名称*指针变量名称;您也可以将已定义的指针变量指向结构类型变量(请注意,它只能指向一个结构类

14、型变量,而不是结构类型变量的成员)。例如,指针变量=(3)引用形式如下:指针变量成员,其中运算符“-”被称为指向运算符,由减号“-”和小于号“-”组成。以下是与指向操作符相关的几个操作:用一个简单的例子说明指针变量对结构变量的应用。指针指向示意图如图7.4所示。在这个程序中,前两个printf函数输出stu1的每个成员的值,最后两个printf函数以p-num的形式输出stu1的每个成员的值,结果是相同的。7.1结构类型,7.1.3指向结构类型数据的指针,1。指向结构变量的指针,示例7.3:在c语言中,当指针变量p指向结构变量时,下列三个结构成员的引用是等价的:结构变量。成员名称;P-成员名称

15、;(*p)。成员名称;通常,采用前两种方法之一。7.1结构类型,7.1.3结构类型数据指针,1 .指向结构变量的指针,7.1结构类型,7.1.3结构类型数据指针,2 .指向结构数组的指针,可用于指向结构数组及其元素。它的定义和使用原则与指向结构变量的指针相同。示例7.4:7.1结构类型,7.1.3结构类型数据指针,3。使用指向结构的指针作为函数参数,一个结构变量的值被传递给另一个函数。有三种方法:传递结构成员:通过值传递结构变量的成员,就像普通变量一样。此时,调用函数只使用结构的一些成员。转移结构变量:使用结构变量作为整体转移的函数参数。然而,这种传输需要根据成员的值逐个传输所有成员,特别是当成员是数组时,这将使传输时间和空间开销非常大,严重降低程序的效率。传递结构指针:它使用指针变量(或结构数组名)作为函数参数进行传递,其中只有地址从实际参数传递到形式参数,从而减少了时间和空间开销。例7.5,例7.6:例7.1结构类型,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论