第七章 结构体、共同体和枚举类型.

Slides:



Advertisements
Similar presentations
目 录  第 1 章 C++ 概述  第 2 章 数据类型、运算符和表达式  第 3 章 简单的输入 / 输出  第 4 章 C++ 的流程控制  第 5 章 函数  第 6 章 编译预处理  第 7 章 数组  第 8 章 结构体、共同体和枚举类型  第 9 章 指针和引用  第.
Advertisements

程序设计导论 ——第15讲 结构与结构数组.
程序设计导论 结构与结构数组.
电子成绩单项目实现.
大学实用教程 C语言.
“08高考化学学业水平(必修科目)测试的命题和教学对策研究”
第14章 c++中的代码重用.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
C程序设计 第9章 自定义数据类型 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
第九章 结构体 主讲教师 :贾月乐 电话:
第10章 结构体与共用体 概述 结构体 共用体 枚举类型.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
7.1 结构体类型 7.2 共用体 7.3 枚举类型 7.4 用typedef声明类型
结构体和共用体 2 梁春燕 华电信息管理教研室.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第9章 用户自己建立数据类型 9.1 定义和使用结构体变量 9.2 使用结构体数组 9.3 结构体指针 9.4 用指针处理链表
程序设计专题 第2讲 - 结构 刘新国.
自定义数据类型 潘荣江 山东大学计算机科学与技术学院
程序设计基础.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
辅导课程六.
第7讲 结构体与共用体 7.1 结构体 7.2 共用体.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第8章 结 构 体.
第11章 结构体和共用体.
第二章 Java语言基础.
C++语言程序设计 第二章 C++简单程序设计.
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言复习3----结构体.
C语言程序设计.
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
OOP6 結構Struct 黃兆武.
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
第十章 结构体与链表 西安工程大学.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
第9章 用户自己建立数据类型 C语言提供了一些系统已定义好的数据类型,如int,float,char,用户可以用它们定义变量。
第1讲 C语言基础 要求: (1) C程序的组成 (2) C语言的标识符是如何定义的。 (3) C语言有哪些基本数据类型?各种基本数
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
C++大学基础教程 第7章 其它自定义数据类型 北京科技大学 信息基础科学系.
第 二 章 数据类型、运算符与表达式.
第九章 用户建立的数据类型.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
第三章 数据抽象.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九节 赋值运算符和赋值表达式.
第二章 类型、对象、运算符和表达式.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 基本数据类型 ——数据的表示.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
#include <iostream.h>
结构体与共用体 结构体 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体 自定义数据类型 结构体类型定义
本节内容 结构体.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
基本知识 数据类型、变量、常量、运算符.
第14讲 结构体和共用体 计算机与通信工程学院.
第八章 结构体和共用体 结构体类型和结构体变量 结构体数组 结构体指针变量 共用体.
第六章 复合数据类型 指针的声明与使用 数组的声明与使用 指针与数组的相互引用 字符串及相关库函数 new与delete
安排座位.
第二章 简单数据类型 §2.1 数据类型概述 §2.2 变量和常量 §2.3 简单数据类型 §2.4 简单数据类型的相互转换
Presentation transcript:

第七章 结构体、共同体和枚举类型

7.1 结构体定义及应用 7.2 共同体定义及应用 7.3 枚举类型定义及应用

7.1结构体的定义及应用 当需要将不同类型数据组合在一起为一个整体来处理,构成新的数据类型时,C++提供了结构体类型。 7.1.1 结构体类型的定义 关键字struct 定义结构体类型 struct <结构体类型名> { <类型名> <变量名1> 《<类型名> <变量名2>…》 };

结构体类型定义 可由如下方法定义以上结构体类型: Struct student { char num[9]; char name[10]; char sex[3]; int age; float score; }; 结构体名 结构体类型名 成员列表 成员类型 成员名 ;不能忘

注意: 编译程序不为任何数据类型分配存储空间,只有定义了结构体类型的变量时,系统才为这种变量分配存储空间 定义结构体的成员时,不能指定成员的存储类型为auto,register,xetern

结构体类型变量定义 结构体是由用户自定义的数据类型,定义后,系统将其与int,char,float等基本数据类型同等看待。可以用这种类型定义变量。 结构体变量与其他类型变量一样,必需先定义后使用。 《存储类型》<结构体类型名><变量1>《<变量2>…》 《存储类型》struct <结构体类型名><变量1>《<变量2>…》

结构体的变量定义 1、先定义类型,然后定义变量: struct student { int id; char name[20]; char sex; int age; float Engl,Phys; }; struct student s1,s2; student ss[30]; 2、也可以在定义结构体类型的同时定义其变量: struct book { char name[80]; int code; char author[20]; }bk1,bks[50];

结构体的变量定义 3、省略结构体类型名,直接定义其变量: struct { int year; int month; int day; }d1,d2,d3; 这种定义方式只能在定义结构体类型时定义变量,在程序其他地方不能再定义该结构体类型变量。

嵌套定义 结构体可以嵌套定义,即一个结构体可以包含结构体变量成员 struct date { int year; int month; }; struct student { char num[8]; char name[10]; char sex; struct date birthday; float score; } student1,student2; student num name sex birthday score year month

结构体变量初始化 可以在定义结构体变量的同时对其初始化: book b1={“C++程序设计”,1700,”张江”}; studen s1={ 101,”Linli”,’M’,{1980,06,22},87,90,70,97}; 初始化数据必需注意类型与排列顺序与结构体类型定义的类型一致。结构体成员初始化数据合成一组。 编译器为每个结构体变量分配存储空间,大小为所有成员占用空间之和。

结构体变量的存放 例7.1 结构体的各成员在内存为依次连续存放 struct date { int year; int month; }; struct student int id; char name[10]; struct date birthday; char sex; } stu; 4字节 stu stu.id stu.name stu. sex 10字节 stu.birthday.year stu.birthday.month 1字节 例7.1

结构体变量及其成员的使用 对于结构体类型,必需通过其变量来使用。不能直接引用结构体变量,只能引用其成员。通过成员运算符 “.” 来引用。 结构体变量名.成员名 各成员与其同类型的普通变量用法相同 例如: cout<< b1.name<<b1.code<<b1.author<<”\n”; 同类型结构体变量可以相互赋值,结果相当于对应成员对应赋值; book b1={“C++程序设计”,1700,”谭浩强”},b2,b3; b2=b1; // 相当于: { strcpy(b2.name,b1.name); b2.code=b1.code; strcpy(b2.author,b1.author);}

使用 结构体变量不能整体输入输出,也不能整体赋值。只能根据其成员数据类型,对各成员分别输入输出或赋值。 book bk; bk={“C++程序设计”,1700,”谭浩强”};//错误,不能整体赋值 结构体类型变量可以作函数参数或返回值类型。形参为结构体类型时,函数调用仍属值调用,被调函数中对结构体变量的修改不能影响实参状态。 P122 例7.2

7.1.4 结构体数组 当数组元素是结构体类型时,数组称为结构体数组。结构体数组定义及使用与普通数组类似,可以在定义同时初始化,每个元素的初始化数据是一组数据。 例p123_extend 例3, 例4

void main(){ Person temp; for(int i=0;i<6;i++){ for(int j=0;j<6-i-1;j++) if(allone[j].salary>allone[j+1].salary) { temp = allone[j]; allone[j] = allone[j+1]; allone[j+1]=temp; } for( i=0 ;i<6;i++) // cout<< allone[i].name<<” “ << allone[i].id <<”“ <<allone[i].salary<<’\n’; #include <iostream.h> struct person{ char name[20]; unsigned long id; float salary; }; Person allone[6] = {{“jone”,12345,339.0}, {“david”,13916,449.0}, {“marit”,27519,311.0}, {“jasen”,42876,623.0} {“peter”,23987,400.0}, {“yoke”,12335,511.0}

结构体类型的静态成员 struct stu{ static int id; int eng; }; 当结构体类型中定义了静态成员时,则无论这种类型结构体定义了多少变量,编译器只为成员分配一个存储空间,所有变量共同使用该成员的空间。 struct stu{ static int id; int eng; }; int stu::id=50;//静态变量一定要有 //定义性说明和初始化 stu =s1;

void main() { s s2; cout<<”s1.id=”<<s1.id<<’\t’<< ”s2.id=”<<s2.id<<’\n’; s2.id = 200; cout<<”s1.id=”<<s1.id<<’\t’<< ”s2.id=”<<s2.id<<’\n’; return; }

共同体定义及应用 7.2.1 共同体的概念 有时需将几种不同类型变量存放到同一段内存单元中,都从同一起始地址开始存放,这就需要使用覆盖技术,几个变量互相覆盖。 使几个不同变量共占同一段内存的结构称为“共同体”类型的结构。 定义形式: union 共同体名 {成员表列: }变量表列; 定义形式与结构体类似,关键字用union。

union data {int i; char ch; float f; }a,b,c; 共同体变量定义和存储 或 union { int i; char ch; float f; }a,b,c; 或 union data { int i; char ch; float f; }; union data a,b,c; 结构体变量所占内存长度是各成员占的内存之和,若上面union为struct,则占4+1+4=9字节。共用体变量所占内存长度是最长的成员长度。上例中,float最长,故为4个字节。 用sizeof(union data)得到最长成员长度

1000地址 1000地址 整型 i   字符型ch 实型 f

共同体变量的引用 遵循先定义后引用原则,只有定义了共同体变量才能引用它。 不能引用共同体变量,只能引用变量中的成员。 对于上节定义的变量,可以是 a.i,b.ch, c.f 。 不能引用a cout<<a; 错 cout<< a.i; 对 cout<< a.f; 对

共同体变量类型数据的特点 1.虽然几种不同类型成员存放在同一段内存中,但某一时刻只能存放其中之一,不是同时存放几种,每一时刻只有一个成员起作用(不是同时起作用),互相覆盖。 2.某一时刻变量中起作用的成员是最后一次存放的成员,覆盖了先前存放的成员。如:a.i=1;a.ch=’a’;a.f=5.1;只有a.f有效,a.i,a.ch已无效。引用时应注意当前有效的是哪个成员。 3.共同体变量及其各个成员的地址是同一地址, &a=&a.i=&a.ch=&a.f

4.下列对共同体变量的操作是非法的: 变量名赋值, 定义变量时初始化 通过引用变量名取得成员值 共同体变量作函数参数 函数返回共同体类型值 a=1; 错 m=a; 错 union {int i ; char ch; }a={1,’a’}; 错,不能初始化。

union … struct … {……struct … ……}; union { …… int a[5]; }a,b; 5.共同体和结构体可以互相嵌套定义,数组可以是共用体成员,也可以定义共用体数组。 union … {……struct … ……}; union { …… int a[5]; }a,b; struct … {…… union }; }; {…… }a[4];

例 union entry {struct book {char author[20]; char title[40]; }book; 定义一个有关记录书籍、杂志文章方面信息的共用体 union entry {struct book {char author[20]; char title[40]; }book; struct article char journal[40]; }artic; }info;

共同体变量的用途 写系统软件时,处理符号表。如,某个单元内放一个常量,该常量根据不同情况可能是整型、实、字符或单、双精度等。 可以设置类型标志,依此标志决定按什么类型处理。

struct {…… union { int i; char ch; float f; double d; }data; int type; switch(a.type) {case 0: cout<<a.data.i ; break; case 1: cout<< a.data.ch; break; case 2: cout<< a.data.f; break; case 3: cout<< a.data.d; break; }

枚举类型定义及应用 如果一个变量只有几种可能的值,可以定义为枚举类型,定义时将值一一列出,变量的值只限于列举的范围,以关键字enum开头,例: enum weekday{ sun,mon,tue,wed,thu,fri,sat}; 上面定义了weekday 枚举类型,可用于定义变量, enum {sun,mon,tue,wed,thu,fri,sat} workday,weekend; { }中元素称为枚举元素或枚举常量,是由用户定义的标识符。

说明 说明: 1、C++编译时,枚举元素按常量处理,称枚举常量,不能对其赋值。 2、枚举元素作为常量是有值的,编译器按定义时顺序使它们值为0、1,2等 如有 workday=mon,则workday值为1,可以整数形式输出。 也可以由程序员在定义时指定枚举元素的值 enum weekday {sun=7,mon=1,tue,wed,thur,fri,sat};

3、枚举值可用来作判断比较 if(workday==mon)…… if(workday>sun)…… 按定义时的顺序比较 4、 一个整数不能直接赋给枚举变量,它们是不同类型,要进行强制类型转换 workday=(enum weekday)2; workday=tue; 整型表达式也可以转换类型后赋给枚举变量 workday=(enum weekday)(5-3)

枚举类型的优点 枚举类型的优点: 虽然可以用常数代表各枚举元素,但是用枚举元素更直观,便于理解。枚举变量的值限制于定义时列举的几个元素范围内,赋予另外的值会有错误信息,便于查错。 P132例7.6, 7.7