自定义数据类型 潘荣江 山东大学计算机科学与技术学院

Slides:



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

程序设计导论 ——第15讲 结构与结构数组.
程序设计导论 结构与结构数组.
第7章 指针 存储地址的变量的类型就是指针类型 能直接对内存地址操作, 实现动态存储管理 容易产生副作用, 初学者常会出错
电子成绩单项目实现.
第10章 结构体与链表 本章要点: 结构体类型与结构体变量的定义 结构体变量的引用与初始化 结构体数组 链表处理 共用体类型和枚举类型
大学实用教程 C语言.
第6章 指针 6.1 指针的概念 6.2 变量与指针 6.3 数组与指针 6.4 字符串与指针 6.5 函数与指针 6.6 返回指针值的函数
趙靖宇時間-專治你的Monday blue
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
第7章 结构体、联合体和枚举类型 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)
C程序设计 第9章 自定义数据类型 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
程式設計 博碩文化出版發行.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
.NET 程式設計入門(使用 C#) 講師:鄧智鴻.
第九章 结构体 主讲教师 :贾月乐 电话:
使用VC++6.0调试程序.
第10章 结构体与共用体 概述 结构体 共用体 枚举类型.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
7.1 结构体类型 7.2 共用体 7.3 枚举类型 7.4 用typedef声明类型
第9章 结构体.
结构体和共用体 2 梁春燕 华电信息管理教研室.
第9章 用户自己建立数据类型 9.1 定义和使用结构体变量 9.2 使用结构体数组 9.3 结构体指针 9.4 用指针处理链表
程序设计专题 第2讲 - 结构 刘新国.
程序设计基础.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
辅导课程六.
第7讲 结构体与共用体 7.1 结构体 7.2 共用体.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第8章 结 构 体.
第11章 结构体和共用体.
第二章 Java语言基础.
第七章 结构体、共同体和枚举类型.
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言复习3----结构体.
C语言程序设计.
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
OOP6 結構Struct 黃兆武.
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
第十章 结构体与链表 西安工程大学.
第9章 用户自己建立数据类型 C语言提供了一些系统已定义好的数据类型,如int,float,char,用户可以用它们定义变量。
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
Java變數 2014/6/24.
C++大学基础教程 第7章 其它自定义数据类型 北京科技大学 信息基础科学系.
2011 邀请中国姐妹学校韩国语研修团项目 申请时间: ~5月 27日 / 项目地点: 汉阳大学 安山校区 / 项目时间: (星期日) ~ 7.22(星期五) 费用: 100万元(韩币/人 (包含项目 - 学费, 教材费, 宿舍费, 接机费用及所有文化体验活动项目费用)
第九章 用户建立的数据类型.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九节 赋值运算符和赋值表达式.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
结构体与共用体 结构体 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体 自定义数据类型 结构体类型定义
本节内容 结构体.
C语言程序设计 第9章 结构体.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
基本知识 数据类型、变量、常量、运算符.
第14讲 结构体和共用体 计算机与通信工程学院.
第八章 结构体和共用体 结构体类型和结构体变量 结构体数组 结构体指针变量 共用体.
第六章 复合数据类型 指针的声明与使用 数组的声明与使用 指针与数组的相互引用 字符串及相关库函数 new与delete
本节内容 this指针 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
THE C PROGRAMMING LANGUAGE
安排座位.
第二章 简单数据类型 §2.1 数据类型概述 §2.2 变量和常量 §2.3 简单数据类型 §2.4 简单数据类型的相互转换
Presentation transcript:

自定义数据类型 潘荣江 panrj@sdu.edu.cn 山东大学计算机科学与技术学院

结构体类型 将不同种类型的数据有序地组合在一起,构造出一个新的数据类型,这种形式称为结构体。 结构体是多种类型组合的数据类型。

struct 结构体名 { 成员列表 }; struct student { int num; char name[20]; { 成员列表 }; 关键字 结构体名 struct student { int num; char name[20]; char sex; char addr[30]; }; 不同数据类型组成的成员 分号不能少

结构体类型只是一种数据类型,不占内存空间,只有定义结构体类型变量时才开辟内存空间。 定义结构体类型变量的方法 一、先定义结构体类型再定义变量名 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; 结构体类型只是一种数据类型,不占内存空间,只有定义结构体类型变量时才开辟内存空间。 struct student student1, student2; 变量1 变量2 结构体类型名

# define STUDENT struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; STUDENT student1,student2; 凡是STUDENT的地方都用struct student 机械替换。

二、在定义类型的同时定义变量 struct student struct 结构体名 { int num; { char name[20]; char sex; int age; float score; char addr[30]; } student1, student2; struct 结构体名 { 成员列表 }变量名列表; 紧接着定义变量

三、直接定义结构体类型变量 struct { int num; char name[20]; char sex; int age; float score; char addr[30]; } student1, student2; struct { 成员列表 }变量名列表; 不出现结构体名。

对局部变量类型的结构体变量初始化 输出: LiLin void main(void) { struct student { long int num; char name[20]; char sex; char addr[30]; } student1={901031, “Li Lin”, ‘M’, “123 Beijing Road”}; cout<<student1.name<<endl; } 对变量初始化,一一赋值 输出: LiLin

1、结构体类型的变量在内存中依照其成员的顺序顺序排列,所占内存空间的大小是其全体成员所占空间的总和。 2、在编译时,仅对变量分配空间,不对类型分配空间。 3、对结构体中各个成员可以单独引用、赋值,其作用与变量等同。 格式:变量名 . 成员名 student1 . num

4、结构体的成员可以是另一个结构体类型。 struct student struct date { int num; { int month; int day; int year; }; struct student { int num; char name[20]; struct date birthday; }; 成员名 成员类型 5、成员名可以与程序中的变量名相同,二者分占不同的内存单元,互不干扰。例如,在程序中仍可以定义变量 int num;

结构体类型变量的使用 1、不能对结构体变量整体赋值或输出,只能分别使用各个成员。 cin>>student1; 错误 必须用成员名引用 cin>>student1.num; student1.num=100; 可以将一个结构体变量整体赋给另外一个相同类型的结构体变量。 student2=student1; 2、嵌套的结构体变量必须逐层引用。 student1.birthday.day=25; 3、结构体变量中的成员可以同一般变量一样进行运算。 student1.birthday.day++; student1.score+=60;

关于结构类型变量的使用,说明以下几点: 1、同类型的结构体变量之间可以直接赋值。这种赋值等同于各个成员的依次赋值。 2、结构体变量不能直接进行输入输出,它的每一个成员能否直接进行输入输出,取决于其成员的类型,若是基本类型或是字符数组,则可以直接输入输出。 3、结构体变量可以作为函数的参数,函数也可以返回结构体的值。当函数的形参与实参为结构体类型的变量时,这种结合方式属于值调用方式,即属于值传递。

结构体数组 结构体数组中的每个元素都是一个结构体类型的变量,分别包括该类型的各个成员项。数组各元素在内存中连续存放。

一、结构体数组的定义 struct student { int num; struct student char name[20]; char sex; int age; float score; char addr[30]; } ; struct student stu[30]; struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; } stu[30]; 直接定义

二、结构体数组的初始化 struct student { int num; char name[20]; char sex; } stu[3]={ {1011, "Li Lin",'M'}, {1012,"Wang Lan",'F'}, {1013,"Liu Fang",'F'};

struct student { int num; char name[20]; char sex; } stu[ ]={ {1011,"Li Lin",'M'}, {1012,"Wang Lan",'F'}, {1013,"Liu Fang",'F'}};

以下程序的结果是: void main(void) { struct date { int year, month, day; } today; cout<<sizeof(struct date)<<endl; } 12

根据下面的定义,能打印出字母M的语句是: struct person { char name[9]; int age; }; struct person class[10]={ “Jone”,17, “Paul”,19, “Mary”,18, “Adam”,16 cout<<class[3].name<<endl; cout<<class[3].name[1]<<endl; cout<<class[2].name[1]<<endl; cout<<class[2].name[0]<<endl; 输出:Adam 输出:d 输出:a 输出:M

结构体变量的指针 一个结构体变量的指针就是该变量所占据的内存 段的起始地址。可以设一个指针变量,用来指向 一个结构体变量,此时该指针变量的值是结构体 变量的起始地址。 通过指向结构体变量的指针引用结构体变量中的 成员 C++提供了指向结构体变量的运算符-> 例如p->num表示指针p当前指向的结构体变量中的成 员num。p->num和(*p).num等价。同样, p->name等 价于(*p).name

结构体类型数据作为函数参数 将一个结构体变量中的数据传递给另一个函数,有 下列3种方法: (1)用结构体变量名作参数,将实参值传给形参,一 般较少用这种方法(时间和空间开销大)。 (2)用指向结构体变量的指针作实参,将结构体变 量的地址传给形参。 (3)用结构体变量的引用变量作函数参数

共用体 C++语言中,允许不同的数据类型使用同一存储区域,即同一存储区域由不同类型的变量共同表示。这种数据类型就是共用体。 union data { int i; char ch; float f; } a, b, c; union 共用体名 { 成员表列; } 变量表列; union data a, b, c; 这几个成员在共用体变量中存放在同一地址,相互覆盖,其长度为最长的成员的长度。

共用体变量的引用 不能整体引用共用体变量,只能引用变量中的成员。 a.i 表示为整型 a.ch 表示为字符型 a.f 表示为符点型

共用体变量的特点 1、共用体的空间在某一时刻只有一个成员在起作用。 2、共用体变量中的成员是最后一次放入的成员。 3、共用体变量不能在定义时赋初值。 4、共用体变量不能作为函数的参数或函数值,但可使用指向共用体的指针变量。 5、共用体可以作为结构的成员,结构体也可以作为共用体的成员。

18 union un { int i; double y; }; struct st { char a[10]; union un b; cout<<sizeof(struct st)<<endl; 18

低字节低地址 高字节高地址 输出:060501 6 5 65 ? 56 ? a union un { short int a; char c[2]; } w; w.c[0]=‘A’; w.c[1]=‘a’; cout<<oct<<w.a<<endl; 低字节低地址 高字节高地址 6 5 2000H 2001H 65 ? 56 ? 输出:060501 ‘a’ 2001H ‘A’ 2000H 1 w.c[1] w.c[0] a

枚举类型 如果一个变量只有几种可能的值,可以定义为枚举类型。 枚举类型就是将变量的值一一列举出来,变量的值仅限于列举出来的值的范围内。

enum weekday {sun, mon, tue, wed, thu, fri, sat}; 数据类型 可能取的值 变量 enum weekday workday, weekend ; workday 和 weekend 值只能是sun 到 sat 其中之一。 另一种定义变量的方法 enum {sun, mon, tue, wed, thu, fri, sat} workday, weekend ; 其中sun, mon,....,sat称为枚举元素或枚举常量,为用户定义的标识符,所代表的意义由用户决定,在程序中体现出来。

1、枚举元素为常量,不可赋值运算。 sun=0; mon=1; 2、在定义枚举类型的同时,编译程序按顺序给每个枚举元素一个对应的序号,序号从0开始,后续元素依次加1。 enum weekday {sun, mon, tue, wed, thu, fri, sat}; 0 , 1, 2, 3, 4, 5, 6 3、可以在定义时人为指定枚举元素的序号值。 enum weekday {sun=7, mon=1, tue, wed, thu, fri, sat}; 7 , 1, 2, 3, 4, 5, 6 4、只能给枚举变量赋枚举值,若赋序号值必须进行强制类型转换。 day=mon ; day=1; day=(enum weekday)1;

5、枚举元素可以用来进行比较判断。 if (workday= = mon) if (workday>sun) 6、枚举值可以进行加减一个整数n的运算,得到其前后第n个元素的值。 workday=sun; workday=(week)(workday+2); workday= = tue 7、枚举值可以按整型输出其序号值。 workday=tue; cout<<workday; 2

用typedef定义类型名 typedef定义新的类型来代替已有的类型。 typedef 已定义的类型 新的类型 typedef float REAL REAL x, y; float x, y; 1、typedef可以定义类型,但不能定义变量。 2、typedef只能对已经存在的类型名重新定义一个类型名,而不能创建一个新的类型名。 typedef struct student { int i; int *p; } REC; REC x, y, *pt; struct student x, y, *pt;

typedef char * CHARP; CHARP p1,p2; char *p1, *p2; typedef char STRING[81]; STRING s1, s2, s3; char s1[81], s2[81],s3[81]; 1、先按定义变量的方法写出定义体 char s[81]; 2、把变量名换成新类型名 char STRING[81]; 3、在前面加typedef typedef char STRING[81]; 4、再用新类型名定义变量 STRING s; #define REAL float 编译前简单替换 typedef:编译时处理,定义一个类型替代原有的类型。