C++第8章 结构、联合和枚举

合集下载

C语言课件8-结构枚举等

C语言课件8-结构枚举等
23:44:33
可以用sizeof运算符计 算结构类型的长度 sizeof(struct Student) 的值是18
birthday name year month day sex
9B
2B 2B 2B 1B
8.1.2 结构变量的定义
方式1)先定义结构类型,再定义结构变量
struct Student { int number; char name[9]; 结构类型只是模型, struct Birthday 结构变量才是可操作 { int year; 的实体 int month; int day; } birthday; 应区分结构类型名与结 char sex; 构变量名 }; struct Student student1,student2; 6
number name age sex
结构类型的定义只是定义了数据的形式,即声明 了一种复杂的数据类型,并未生成任何变量,不 占用内存单元。 成员名可以与程序中其它变量同名,二者不代表 同一对象,但为增强可读性,不提倡这样做。
4
结构类型可以嵌套定义
例8.2: struct Student { int number; char name[9]; struct Birthday { int year; int month; int day; }birthday; char sex; number }; 2B
结构变量使用注意点
不允许将一组常量用赋值语句整体赋给结构变 量。
如:struct Student student1; student1={1101, "lilin", 1985,8,1, 'M'}; 错误!
允许将一个结构变量的值整体赋给类型相同的 另一变量。

ch8 结构、联合、位运算和枚举类型

ch8 结构、联合、位运算和枚举类型

程 序 设
结构由4个成员组成,如下图所示。 第一个成员 为num,整型变量;第二个成员为name,字符指
陈 良 银
计 针;第三个成员为sex,字符数组;第四个成员为 游
( 版 )
score,实型变量。 注意在括号后的分号是不可缺 少的。结构定义后,即可进行变量说明。 凡说明
洪 跃 李
为结构StudentType的变量都由上述4个成员组成。旭
陈 良 银
计 printf("姓名:%s\n", ); /* 输出name */


printf("性别:%s\n", student.sex); /* 输出sex */
printf("生日:%d年,%d月,%d日\n",
/* 输出birthday */
洪 跃
版 student.birthday.year, student.birthday.month, ) student.birthday.day);
结构是一种构造的数据类型,是数目固定,类型 伟
不同的若干有序变量的集合。


大 学
num name sex




score
计 算






2019/11/25
9
C
第八章



言 程

二、结构类型变量的定义
: 陈
序 设

以上面定义的SttudentType为例来加以
良 银
计 (
说明
2019/11/25
本章主要内容
主 编

《C语言程序设计》第八章 结构体、共同体和枚举

《C语言程序设计》第八章 结构体、共同体和枚举

{ max=stud[ i ].score;temp= i;} p=stud + temp; printf ( “\n The maximum score:\n” ); printf ( “No:%d \nname:%s\nscore:%4.1f\n”,p->num,p->name,
p->score );
}a ;
main() { a.ch[ 0 ]=13;
a.ch[ 1 ]=0;
printf (“%d\n”,a.i );
}
A. 13
B. 14
C. 208
D. 209
8.10 下面对 typedef 的叙述中不正确的是( )。 A.用 typedef 可以定义各种类型名但不能用来定义变量 B.用 typedef 可以增加新类型 C.用 typedef 只是将已存在的类型用一个新的标识符来代表 D.使用 typedef 有利于程序的通用和移植
对后一种举例如下: struct student {┇
}; struct student stud,arr[3],*p; 结构体变量的引用有三种形式:
106
第八章
结构体、共同体和枚举
1. 结构体变量名.成员名 2. (*指针变量名).成员名 3. 指针变量名->成员名 其中圆点(.)称为成员运算符,箭头(->)称为结构 指向运算符,C 语言中,圆点运算符和箭头运算符都是优先 级最高的运算符。 结构体变量的输入和输出,它必须按成员项逐个地输入 或输出,不能将结构体变量作整体地输入或输出。 共用体类型,是指将不同的成员项存放于同一段内存单 元,共用体的大小与其组成成员中字节数最大的那个成员相 同。共用体变量的定义与引用类似于结构体变量的定义与引 用。枚举类型指明这种类型的变量取值只能是指定的若干个 枚举常量之一。每个枚举常量代表一个具体的值。 用 typedef 可定义新的类型名来代替已有的类型名。其方法如下: 1. 先按定义变量的方法写出定义体; 2. 将变量名换成新类型名; 3. 在最前面加上 typedef; 4. 用新类型名去定义变量。

ch8 结构、联合、位运算和枚举类型

ch8 结构、联合、位运算和枚举类型


/* 学号 */


char *name;

char sex[3];
/* 姓名 */ /* 性别 */
李 旭 伟
float score;
/* 成绩 */

清 };

川 大 学










2019/11/10
8
C
C99
第八章



言 • 在上面的结构定义中,结构名为StudentType,此 :
程 序 设
结构由4个成员组成,如下图所示。 第一个成员 为num,整型变量;第二个成员为name,字符指
陈 良 银
计 针;第三个成员为sex,字符数组;第四个成员为 游
( 版 )
score,实型变量。 注意在括号后的分号是不可缺 少的。结构定义后,即可进行变量说明。 凡说明
洪 跃 李
为结构StudentType的变量都由上述4个成员组成。旭
C99
C
第八章
语 言 程 序 设 计 (
版 )
清 华 大 学 出 版 社
2019/11/10
主 编 : 陈 良 银
游 洪 跃
李 旭 伟

主讲教师:***
川 大
个人主页:***
学 计




1
C
C99
第八章







序 设
教材:《C语言程序设计(C99版)》
良 银




第八章结构体联合与枚举

第八章结构体联合与枚举

第八章结构体、联合与枚举第八章结构体、联合与枚举8.1 概述到目前为止,我们已经学过的数据类型有整型、字符型和实型等基本类型,也学过了数组――一种构造类型数据,数组中的各个元素属于同一种类型。

但在实际应用中,一组数据并不是都由相同性质的数据构成,而常常是由一些不同类型的数据构成。

譬如要统计某班学生成绩,需要知道学生的姓名、成绩,姓名与成绩是两种不同类型的数据。

又如通讯录中有姓名、地址、邮政编码、电话等不同类型的数据。

若用数组来解决问题,则会将这些互相联系的数据割裂开来,不便于引用。

为此,C语言允许用户根据需要自行构造出一种被称为“结构体”的数据类型。

结构体是一种较为复杂而又非常灵活的构造型的数据类型。

一个结构体类型的数据可以由若干个称为成员(或域)的成分组成。

不同的结构体类型其成员不同。

对于一个具体的结构体而言,其成员的数量是固定的,这一点与数组相同,但该结构体中各成员的数据类型可以不同,这是结构体与数组的重要区别。

8.2 结构体类型定义结构体类型定义的一般形式为:struct 结构体名{ 类型名1 结构成员名1; 类型名2 结构成员名2; ??类型名n 结构成员名n; }; 其中:⑴ struct是关键字,是定义结构体类型的标志。

不能省略,表示这是一个“结构体”类型。

⑵ 结构体名是用户定义的结构体类型名,其命名规则同变量名。

⑶ 类型名1~n说明了结构成员的类型。

⑷ 结构成员名1~n为用户定义的一个或多个结构成员的名称,其命名规则同变量名。

多个同类型的成员彼此用逗号分隔。

通常将上面定义形式中{}中的部分称之为成员表列,也叫域表。

注意:结构体类型的声明是以分号(;)结尾的。

例如: struct student {int num;char name[20]; char sex; int age;float score[4]; };211表明定义了一个struct student结构体类型,成员有num,name,score等。

第08章 结构联合枚举

第08章 结构联合枚举
第8章
结构、联合、枚举 结构、联合、
讲授内容
结构的定义与使用 联合的定义与使用 枚举的定义与使用
8.1 结构
对于处理具有某种联系, 对于处理具有某种联系,可以由不同类型的数据项 组成的复杂数据类型, 称为结构, 组成的复杂数据类型,C++称为结构,它能有效 称为结构 地表示出数据的聚集。 地表示出数据的聚集。 逻辑上相关的数据的汇集
num …… …… name …… …… sex …… score ……
说明: 说明: – 结构成员不能是本结构的实例 – 结构成员可以是指向本结构类型的指针 – 结构定义不导致内存分配 – 定义新类型 声明结构变量 student stud1, stud2, *sptr, stu[20]; 定义结构时同时声明结构变量 struct student { int num; 注意: 注意:在C 中结构类型名必须包含 char name[20]; 关键字struct,故定义语句为 ,故定义语句为: char sex; struct student stud1stud2; float score; } stud1, stud2;
例: …… void print(person& pr) { cout<<<<“ ”<<pr.id<<“ } ……
”<<pr.salary<<endl;
3、传递结构变量的地址(传址) 、传递结构变量的地址(传址) 传递结构变量地址与传递引用的功能类似, 传递结构变量地址与传递引用的功能类似,都能实现双 向传递。若将前面程序改为传递结构变量的地址, 向传递。若将前面程序改为传递结构变量的地址,只需定义
不同类型的结构变量不允许相互赋值, 不同类型的结构变量不允许相互赋值,即使两者包含 有相同的成员。例如: 有相同的成员。例如 struct person { char name[20]; unsigned long id; float salary; }; ; struct employee { char name[20]; unsigned long id; float salary; }; ; ….. person pr1={“frank voltaire”,12345678,3.35}; employee er1; er1=pr1; //错误,类型不匹配 错误, 错误

C语言期末复习整理 结构体、联合体、枚举

C语言期末复习整理 结构体、联合体、枚举

C语⾔言 - 结构体、联合体、枚举struct - 结构体结构体是由⼀一系列列具有相同类型或不同类型的数据构成的数据集合。

定义结构体结构体可以定义在主函数外,也可以定义在主函数内。

和定义函数⼀一样,只有在定义下⽅方的代码才能够识别,在上⽅方的代码需要申明之后再使⽤用。

结构体的定义⽅方式如下:struct结构体名称{变量量类型变量量名;变量量类型变量量名;...}结构体变量量名;例例如⼀一个统计学⽣生成绩的结构体,它包含了了 id, name, math_score, c_score, english_score 等内容:struct stu{char id[20];char name[20];double math_score;double c_score;double english_score;}s[10];定义完结构体之后,我们就可以在其他地⽅方使⽤用:struct stu a;结构体变量量struct stu *p结构体指针struct stu s[10];结构体数组struct stu func()返回⼀一个结构体类型的函数结构体的赋值在初始化时,我们可以直接通过{和}来为结构体赋值,赋值的顺序就是定义的顺序:struct stu a = {"123", "Aaron", 77, 89, 88};struct stu b[2] = {{"456", "Candy", 87, 86, 72}, {"789", "David", 67, 99, 78}}在初始化之后,我们就不能够直接对结构体进⾏行行整体赋值了了,⽽而只能⼀一次修改其中的某⼀一项值:struct stu *p, a = {"123", "Aaron", 77, 89, 88};p =&a; // p为结构体指针a.math_score =79; // 结构体变量量使⽤用.来访问内容(*p).c_score =87;p->english_score =92; // 结构体指针可以使⽤用->来代替(*p).访问内容printf("%s %s %lf %lf %lf\n", a.id, , a.math_score, a.c_score,a.english_score);两个同类型的结构体变量量是⽀支持赋值的,比如下⽅方的代码就直接将 b 的每个元素的值赋给了了 a :struct stu a = {"456", "Candy", 87, 86, 72};struct stu b = {"789", "David", 67, 99, 78};a = b;printf("%s %s %lf %lf %lf\n", a.id, , a.math_score, a.c_score,a.english_score);union - 联合体联合体的定义⽅方法与规则与结构体类似,因此这⾥里里就不再重复。

8章 c语言程序设计 结构体,共用体与枚举类型

8章 c语言程序设计 结构体,共用体与枚举类型

当通过指针变量引用结构体成员时,若表达式中含有++,-等运算符时,应根据运算符优先级来确定表达式含义。例: ++ p-> score 相当于++( p-> score),结果使score加1。 (++ p)-> score 则再访问成员score之前,使p加1。 例:struct abc {char a[20]; int *pt; }p; pt是结构体类型中的成员,则表达式*p->pt引用的是pt所 指存储单元; *p->pt++是再引用了pt所指存储单元后,使 指针pt加1;( *p->pt)++使pt所指向的单元的值加1;而 *p ++ ->pt在访问了pt所指存储单元后,p加1。
例:struct std_info {char name[9]; char sex[3]; float score; struct date birthday; }stud,arr[5],*p; p=& stud; (1)若要引用结构体类型变量stud 中score成员项,可写成: stud. score p-> score *(p). score arr[1] .score /*通过结构体变量引用*/ /*通过指针变量引用*/ /*通过指针变量引用*/
2.将一个结构体变量作为一个整体赋给另一具有相同类型的 结构体变量 例:struct {char name[15]; int num; }stud1,stud2={“wangfang”,01}; 执行赋值语句: stud1=stud2; 则stud2中把每个成员的值依次赋给stud1中对应的同名成员。 C不允许把一个结构体变量作为一个整体进行输入和输出。 例: scanf(“%d”,& stud1); printf(“%d”,stud1);都是错误的 结构体变量有多个不同类型的数据项,必须逐个用相应的格 式像普通变量一样输入和输出。 scanf(“%s,%d”, stud1. name ,& stud1.num); 注意name[15]是数组,数组名本身就是地址。

C语言结构体,枚举,联合体详解

C语言结构体,枚举,联合体详解

C语⾔结构体,枚举,联合体详解⽬录1.什么是结构体、枚举、联合体2.定义结构体2.1 包含结构体成员变量、variable2.2 tag、结构体成员变量2.3 ⽤结构体声名变量2.4 ⽤typedef 创建新类型2.5 两个结构体相互包含2.6 结构体变量初始化2.7 结构体指针3.枚举3.1 定义⽅式3.2 为什么⽤枚举3.3 枚举变量的定义3.4 实例3.5 枚举实际⽤途4.联合体4.1 与结构体区别4.2 定义总结1.什么是结构体、枚举、联合体结构体(struct)是由⼀系列具有相同类型或不同类型的数据项构成的数据集合,这些数据项称为结构体的成员。

如下⾯的student结构体包含三个成员,分别是name、num、age。

枚举(enum)是C语⾔的⼀种特殊类型。

当我们在编程中遇到定义⼀些固定长度或范围的数值时,可以考虑使⽤枚举类型。

使⽤枚举可以让我们的程序可读性更强、看起来更加直观。

举个例⼦,如果我们在编程中需要使⽤数字06分别表⽰星期⽇星期六,程序的可读性就不⾼,我们需要翻⼿册或者看程序注释才能知道每个数字具体代表什么意思。

如果我们使⽤枚举呢,基本上不需要看注释或⼿册就可知晓其⼤意。

联合体是⼀种结构。

它的所有成员相对于基地址的偏移量都是0。

此结构空间要⼤到⾜够容纳最宽的成员。

其对其⽅式适合其中所有成员。

123456// 创建结构体struct student{char *name; // 学⽣名字int num; // 学⽣学号intage; // 学⽣年龄};2.定义结构体12struct tag{ 成员变量...}variable;通常,tag 、结构体成员变量、variable 这3个部分⾄少要出现2个2.1 包含结构体成员变量、variable1234struct {char name[100];int age;}s1;//s1相当于对这个结构体声明了⼀个变量,可以在程序中直接调⽤s1相当于声明的全局变量。

C语言中结构、联合、枚举的说明

C语言中结构、联合、枚举的说明

C语⾔中结构、联合、枚举的说明复杂的数据类型⼀般的步骤:1、声明模板2、定义变量,分配内存空间3、初始化++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++标记、标识符、标签++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++结构:设计程序很重要的⼀步是提⾼表⽰数据的能⼒,选择表⽰数据的⽅法。

C提供了结构变量(structure variable)提⾼你表⽰数据的能⼒。

14.1 建⽴结构声明结构声明(structure variable)描述了⼀个结构的组织布局。

声明类似如下:struct book{char title[MAXTITL];char author[MAXAUTL];float value;};该声明并未创建实际的数据对象,只描述了该对象由什么组成。

(结构声明有时候称为模板)关键字struct,表明跟在其后的是⼀个结构,后⾯是⼀个可选的标记。

后⾯的程序可以根据标记引⽤该结构。

如果打算重复使⽤该模板,就要使⽤带标记的形式。

⽤花括号括起来的是结构成员列表。

花括号后⾯的分号是必须的,表明结构布局定义结束。

14.2 定义结构变量结构有两层含义。

⼀层含义是“结构布局”,结构布局告诉编译器如何表⽰数据,但是它并未让编译器为数据分配空间。

下⼀步是创建⼀个结构变量,即是结构的另⼀层含义。

例如 struct book library;编译器执⾏这⾏代码便创建了结构变量library。

编译器使⽤book模板为该变量分配空间。

解释:⼀个内含MAXTITL个元素的char数组,⼀个内含MAXAUTL个元素的char数组和⼀个float类型的变量;这些存储空间都与⼀个名称library结合在⼀起。

struct book的作⽤相当于声明了⼀个int或float。

C语言 第八章 结构体

C语言 第八章 结构体

共用体
3)直接定义联合变量 union {
int i;
float f; }num; 说明:(1)共用体变量的所有成员占有同一段内存,所占内存空 间是其成员中字节数最大的成员占有的字节数。
(2)共用体变量中可以定义许多不同类型的成员,但同一时刻只
有一个成员的数据有效。
共用体
4.共用体变量初始化 初始化时,只能对第一个成员的数据类型初始化。 例:union data num={10}; 正确 union data num={10,25.4}; 错误
结构体变量
方法三:定义结构体类型的同时定义结构体变量,省略结构体类型名
struct DATE{ int year; int month; int day;}; struct {
long int number;
char name[8]; int age;
char *sex;
struct DATE birthday; }stu1,stu2;
数据类型
数据类型
成员名1;
成员名2;
//成员表
……
};
结构体类型
2.结构体类型的定义: 说明: (1) struct是关键字,标识一个结构体类型定义的开头 (2)“结构体类型名”是表示该结构体类型的名称的标识符,可
类比int、char
(3)“成员表”是构成结构体类型的成份,由一个或多个成员构
成,每个成员有自己的成员名。各成员数据类型可以不同,既可以
枚举类型
3.枚举变量定义
方式一:类型和变量分开定义 enum WEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,Sat};//定义枚举类型 enum WEEKDAY w;//定义枚举变量w

C程序设计基础第8章 结构体和联合体数据类型

C程序设计基础第8章 结构体和联合体数据类型

结构体类型的定义和使用

结构体类型和结构体变量的定义

结构体类型的嵌套定义 结构体类型可以嵌套定义,即定义的一个结构体类型的成 员中可以有属于另外一个已经定义完成的结构体类型的变 量。 struct student struct date { long number; { int year; char name[20]; int month; struct date birthday; int day; int age; }; char address[80]; long tel; };

结构体类型的定义和使用

结构体类型和结构体变量的定义

定义结构体类型变量的方法 先定义类型,然后定义变量。其形式为: struct 标识符 变量列表 定义结构体类型时同时定义结构体变量。其形式为: struct 标识符 { 结构体成员列表; }结构体变量列表; 直接定义结构体变量。其一般形式为: struct { 结构体成员列表; }结构体变量列表;
结构体和联合体数据类型



结构体类型的定义和使用 结构体数组 结构体数据类型与指针的关系 结构体类型简单应用——单链表基本操作(*) 联合体数据类型
结构体类型的定义和使用

结构体数据类型的基本概念


问题的提出 在实际的计算机应用问题中特别是在事务处理中,常常需 要将不同的数据组合成为一个有机的整体,形成一种能够 既表示出各个数据又表示出这些数据之间关系的构造数据 类型。 解决办法 在C程序设计语言中提供了构造这种数据类型的能力,称 这种由一些属于不同数据类型的数据组合而成的构造数据 类型为结构体类型。

结构体类型的定义和使用

C语言函数结构与联合

C语言函数结构与联合

C语言函数结构与联合第8章结构与联合8.18.28.38.48.5结构联合枚举类型定义本章小结教学目标:本章主要介绍结构与联合两种构造数据类型以及枚举类型的定义和使用,并简单介绍了使用typedef来自定义类型的方法。

通过本章的学习,读者将会学到如何构造与使用结构与联合两种数据类型,并且可以学到枚举类型和自定义类型的使用方法。

教学重点与难点:1.结构类型数据的定义方法和引用方法。

2.结构数组的定义和使用。

3.结构指针及其使用。

4.联合类型数据的定义方法和引用方法。

8.1结构“结构”是一种构造类型,它是由若干“成员”组成的,每一个成员可以是一个基本数据类型或者又是一个构造类型。

结构既然是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它,如同在说明和调用函数之前要先定义函数一样。

8.1.1结构类型定义和结构变量说明1.结构的定义1.结构的定义定义一个结构的一般形式为:truct结构名{成员表列};其中truct是保留字,“truct结构名”称为结构类型标识符,或称为结构类型名。

大括号中的成员表由若干个成员组成,每个成员都是该结构的一个组成部分。

对每个成员也必须做类型说明,其形式为:成员名;类型说明符成员名;成员名的命名应符合标识符的书写规定。

例如:tructtudent{intnum;charname[20];chare某;floatcore;};/某定义结构tudent某//某各成员的内容某/定义一个结构名为tudent的结构类型,该结构由4个成员组成,第一个成员为num,整型变量;第二个成员为name,字符数组;第三个成员为e某,字符变量;第四个成员为core,实型变量。

应注意大括号后的分号是不可少的。

结构类型定义之后,即可进行变量说明,凡说明为结构tudent的变量都由上述4个成员组成。

由此可见,结构是一种复杂的数据类型,是数目固定、类型不同的若干有序变量的集合。

2.结构类型变量的说明说明结构类型变量有以下三种方法,以上面定义的tudent为例来加以说明。

ch8 结构、联合、位运算和枚举类型

ch8 结构、联合、位运算和枚举类型
2019/2/11 16
• 在ANSI C中除了允许具有相同类型的 结构变量相互赋值以外, 一般对结构 变量的使用,包括赋值、输入、输出、 运算等都是通过结构变量的成员来实 现的。
2019/2/11
17
8.1.3结构类型变量的引用
• 表示结构变量成员的一般形式是:
结构变量名.成员名
• 结构变量的赋值就是给各成员赋值。 可用输入语句或赋值语句来完成,下 面通过示例进行说明。
0x14
0x10 0x0C 0x08 0x04 0x00
(Reserved) Data Abort
Prefetch Abort
Software Interrupt Undefined Instruction
位段
Reset
ARM Vector Table
2019/2/11
4
本章的节本要求
• 本章主要介绍C语言的结构、联合、枚 举类型、类型定义:typedef和段位的基 本概念和使用方法。 • 本章要求读者能使用结构、联合、枚 举类型、类型定义:typedef和段位的编 写简单的应用程序。
/* 学号 */ /* 姓名 */ /* 性别 */ /* 年龄 */ /* 成绩 */
/* 定义结数组 */
26
2019/2/11
• 上面定义了数组student,元素类型为 StduentType,数组共有N个元素,读者也 可象定义结构类型变量一样进行直接定义, 例如:
#define N 3 struct StudentType { int num; char *name; char sex[3]; int age; float score; } student[N];
• 上面的定义与第一种方法相同,也定义了 两个变量boy和girl为StudentType结构类型。

C语言8 位域、联合、枚举、定义类型及预处理功能

C语言8 位域、联合、枚举、定义类型及预处理功能

>> 右移位 把操作符前边的整数右移 操作符后边的整数指 常用于除2方次快速计算, 出的位数 常用于除2方次快速计算,取出某 些连续位 ----8 2---------4 16 >> 1 ----8 16>> 2-----4 ----2 16进数演示 16 >> 3 ----2 16进数演示
16 >>1 >>2 >>3 00001000 00000100 00000010 00000001 最高位移入0 最高位移入0
C语言程序设计
按位或 10010111

4
^ 按位异或 二目运算
左结合
异或 是一种逻辑运算,C中没有运算符表示. 是一种逻辑运算, 中没有运算符表示. 逻辑是:相同返回逻辑值0 不同返回逻辑值1 逻辑是:相同返回逻辑值0,不同返回逻辑值1 1⊕1 ---- 0 0⊕1 ---- 1 1⊕0 ---- 1 0⊕0 ---- 0 按位异或 把整数的对应位作为逻辑值,进行异或运算,结果 把整数的对应位作为逻辑值,进行异或运算, 是整数值. 常用于给字中某些位 求同/异 求同/ 是整数值. ----94 1--93 ^ 7 ----94 0 ^ 1--- 1 1 ^
C语言程序设计 16
文件包含 #include 命令
说明: 说明:
③ 在#include命令中,文件名可以用双引号或者是尖括 #include命令中 命令中, 号括起来.二者的区别是: 号括起来.二者的区别是: ● 用尖括号<>:进行预处理时,到由IDE集成开发环境 用尖括号<> 进行预处理时,到由IDE <>: IDE集成开发环境 Directory" 中 "Include Directory"选项设置的目录中去寻找要 包含的文件;找到则包含,没找到则报告出错信息; 包含的文件;找到则包含,没找到则报告出错信息; ● 用双引号"" :进行预处理时,编译系统首先在当 用双引号"" 进行预处理时, 前目录下寻找要包含的文件;找到则包含; 前目录下寻找要包含的文件;找到则包含;如果没有找 则再到由IDE IDE集成开发环境中 Directory" 到,则再到由IDE集成开发环境中 "Include Directory" 选项设置的目录中去寻找要包含的文件;找到则包含, 选项设置的目录中去寻找要包含的文件;找到则包含, 如果还没找到则报告出错信息. 如果还没找到则报告出错信息.
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8.3.4 访问结构体变量 例: address_book a, s [10] //定义两个结构变量 定义两个结构变量 访问结构体变量中的成员 a.num a.depart.num s[3].num s[3].home.tel 8.3.5 结构体变量的初始化(赋值 结构体变量的初始化 赋值) 赋值 例: 给变量赋值 struct student { long int num; char name[10]; int age; char sex; }a={200205312, “zhang li”, 18, ‘w’};
例: 用结构体指针变量完成上题 struct date { int year; int month; int day } Struct student { int num; char name[10]; struct date birthday; }s[30];
main() {int k; struct student *p; p=s; for(k=0; k<3;k++,p++) { cin>>p->num}; cin>>p->name); cin>>p->birthday.year); cin>>p->birthday.month); cin>>p->birthday.day); }
for(k=0; k<3;k++) { cout<<s[k].num; cout<<s[k].name; cout<<s[k].birthday.year; cout<<s[k].birthday.month; cout<<s[k].birthday.day; } }
8.5 用指针代替结构体变量 Struct student { long int num; char name[10]; char sex; }; struct student a; 定义结构体变量 struct student *p; 定义结构体变量指针 p=&a; 将结构体变量地址赋给指针变量 p->num 引用a中的成员 方法一) 中的成员( 引用 中的成员(方法一) (*p).num 引用a中的成员(方法二) 引用 中的成员(方法二) 中的成员
例:结构体嵌套的输入输出 struct date { int year; int month; int day }; struct student { long int num; char name[10]; struct date birthday; }s[3];
main() {int k; for(k=0; k<3;k++) { cin>>s[k].num); cin>>s”,s[k].name); cin>> s[k].birthday.year); cin>> s[k].birthday.month); cin>> s[k]..birthday.day); }
main() {int k; for(k=0; k<3;k++) { cin>>s[k].num; cin>>s[k].name; cin>>s[k].sex; } for(k=0; k<3;k++) { cout<<s[k].num<<”\n”; cout<<s[k].name”\n”; cout<<s[k].sex<<endl; } }
例: 给结构数组赋值 Struct student { long int num; char name[10]; int age; char sex; }s[30]={{200205312,“zhangli” },{2002},…… };
8.4 结构体变量的输出 使用scanf() 给结构体数组类型赋值 例:使用 输入三个学生的有关信息, 输入三个学生的有关信息,然后输出 程序为: 程序为: Struct student { long int num; char name[10]; char sex; } s[3]; ;
8.8 联合(共用体) 联合(共用体) 8.8.1 联合的概念与定义 不同的数据可以共用存储单元 例: union un { int n; char name; float x; } 其特点是所有成员具有相同的首地址 8.8.2 联合体变量的定义 联合体类型名 变量名
8.8.3 联合体的使用 通过变量使用 例: un a,b; a.n=2003; =”hello” b.x=3.1415962
方法二、 方法二、定义结构体时就说明 例:将 m, n 说明成 teacher 结构体类型 struct teacher { char name[10]; int age; char sex; char addr[30]; } m,n;
方法三、 方法三、不出现结构体类型名的说明 struct { char name[10]; int age; char sex; char addr[30]; } m,n; 说明: 1. 结构体中的成员称为域名或分量 说明: 2. 结构体和宏定义常常以头文件方式使用 3. 每一个成员需要进行类型说明 4. 结构体中的成员名可以与普通变量名相同 但使用的方式不同 结构体中的成员名可以与普通变量名相同,但使用的方式不同 但使用的方式不同. 5. 结构体中的成员还可以是另一个结构体变量 6. 可以使用sizeof() 函数测出每一个变量、类型(float等)占用内存的字节数。 可以使用 函数测出每一个变量、类型( 等 占用内存的字节数。 sizeof(a)
其中student 是由用户定义的结构体类型名(在数据类型中有增加了一个类型) 其中 是由用户定义的结构体类型名(在数据类型中有增加了一个类型) 其他称作成员或域名. 其他称作成员或域名 8.3.2 说明结构变量 (结构类型变量定义方法 结构类型变量定义方法) 结构类型变量定义方法 方法一、 方法一、用结构体类型进行说明 说明成student 结构体类型 例:将a,b,c 说明成 struct student a,b,c #define student struct student student a,b,c;
8.3.3结构体成员 结构体成员 结构体中的成员还可以是另一个结构体变量 struct pat { unsigned long zip; //邮编 邮编 char *addr; //地址 地址 unsigned long tel; }; struct address_book { char *name; long num; pat depart; //单位 单位 pat home; //家庭 家庭 }a;
8.9.3 枚举变量的使用 只能做赋值和关系运算。 只能做赋值和关系运算。 days=sun; 说明: 说明 1. 在程序中起到一个限定作用。 在程序中起到一个限定作用。 2. 使用时, 枚举变量的取值只能在定义时的给定范围.。 使用时 枚举变量的取值只能在定义时的给定范围 。 枚举变量输出时,只能输出枚举定义时的序号 只能输出枚举定义时的序号. 枚举变量输出时 只能输出枚举定义时的序号 例如: 例如 days=sat; c<<days<<endl;
例: 一个语句可以定义多个非结构类型 typedef int integer, *pint,&rint 8.3 结构 (结构类型定义 结构类型定义) 结构类型定义 把不同的数据类型或多个数据定义成一个结构, 该结构(类型 称为结构体. 类型)称为结构体 把不同的数据类型或多个数据定义成一个结构 该结构 类型 称为结构体 8.3.1 定义结构 例如,定义一个个人资料的结构体 定义一个个人资料的结构体。 例如 定义一个个人资料的结构体。 struct student { int num; char name[10]; int age; char sex; float score; char addr[30]; }m,n;
for(k=0; k<3;k++,p++) { cout<<p->num}; cout<<p->name); cout<<p->birthday.year); cout<<p->birthday.month); cout<<p->birthday.day); } }
8.7 位域 位域是以二进制形式定义结构成员, 位域是以二进制形式定义结构成员 使用多少定义多少 8.7.1 定义位域的方法 例: struct student { char *name; unsigned int sex : 1; unsigned int age : 7; };
8.6用指针代替结构体数组变量 用指针代替结构体数组变量 Struct student { long int num; char name[10]; char sex; }; struct student s[30]; struct student *p; p=s; p->num 引用某一元素中的num成员 引用某一元素中的 成员 (*p).num (p++)->num 引用某一元素中的num成员后指针指向下一个 人)数组元素 成员后指针指向下一个(人 数组元素 数组元素. 引用某一元素中的 成员后指针指向下一个
第8章 结构、联合和枚举 章 结构、
8.1 类型定义 概念: 概念 由用户自己定义数据类型 方法: 非结构型定义(类型的引用 类型的引用)和结构类型定义 方法 非结构型定义 类型的引用 和结构类型定义 8.2非结构型定义 非结构型定义 例: 将integer 也定义成 int typedef int integer 在程序中: 在程序中 int a,b,c; 和 integer a,b,c; 作用相同 例: 将 ul 定义为 unsigned long typedef ui unsigned long (以少代多 以少代多) 以少代多
相关文档
最新文档