当前位置:文档之家› 第十章 用户自定义数据类型

第十章 用户自定义数据类型

2019/2/17
10.2 结构体类型定义及其变量的声明和引用 10.2.1 结构体数据类型的定义 struct 结构体数据类型名 结构体数据 struct { 不能 类型标识符 成员变量名; 类型标识符 省略 类型标识符 成员变量名; …… 基本数据类型或已定 义的构造数据类型 }; 结构体数据类型名和关键字struct一起构 成结构体数据类型标识符。 结构体数据类型标识符用于声明结构体数 据类型变量(简称结构体变量)
2019/2/17
int main(void) /*两种方法计算*/ 例 10-1 测试结构体数据类型存储空间长度。 { struct student { 不能省略struct int nSizeStud; int nStNo; of struStud are %d and%d.\n",\ printf("Size char cName[20]; sizeof(struct student),sizeof(struStud)); char cSex; nSizeStud=sizeof(struStud.nStNo)+sizeof\ int nAge; (ame)+sizeof(struStud.cSex); float fScore; nSizeStud+=sizeof(struStud.nAge)+sizeof\ char cAddr[30]; (struStud.fScore)+sizeof(struStud.cAddr); } struStud; 运行结果为: printf("Total size is %d\n",nSizeStud); Size of struStud are 59 and 59. return 0; } /*End of main()*/ Total size is 59
2019/2/17
3. 不定义结构体数据类型 名,直接声明结构体变量 例如: struct struct { 类型标识符 成员变量名{ ; 类型标识符 成员变量名; int nStNo; char cName[20]; …… char cSex; } 变量名表列; int nAge; ❁由于无数据类型名,本方法只能在此声明结 float fScore; 构体变量,不能在其它地方。 char cAddr[30]; ❁在不同地方出现的完全相同的结构体数据类 } struStu1,struStu2; 型定义,本质上属于不同的用户自定义数据类 型,其声明的变量也属于不同数据类型。
2019/2/17
2. 在定义结构体数据类型 的同时声明结构变量 struct 结构体数据类型名 { 例如: struct student 类型标识符 成员变量名 ; {; 类型标识符 成员变量名 int nStNo; …… char cName[20]; } 变量名表列; char cSex; int nAge; float fScore; char fAddr[30]; } struStu1, struStu2;
2019/2/17
10.1 结构体数据类型概述 数组是一种构造数据类型,其所有元素的数 据类型相同。结构体是另一种构造数据类型, 它将具有多个属性的对象作为一个整体来描 述。如商品的描述包括商品的编号、名称、 价格、生产日期和生产厂商等属性。用基本 数据类型来定义和描述商品对象需要设置若 干个简单变量或数组变量,它不利于对实际 问题求解过程的描述与实现。 结构体提供了一个变量名下引用多种数据类 型的机制以便把与对象描述相关的各类数据 信息组合到一起进行管理。它克服了只用简 单数据类型和数组进行表述的缺陷。
2019/2/17
结构体 保留关键字 nStNo 例如: 类型名 struct student cName { cSex int nStNo; nAge char cName[20]; 成 员 char cSex; fScore 列 int nAge; 表 float fScore; char cAddr[30]; cAddr };
第十章 用户自定义数据类型
1 2 结构体数据类型概述 结构体数据类型的定义及其变 量的声明和引用 结构体变量的应用
3
4
共用体数据类型定义与共用体 变量的声明于引用 5 为数据类型能够定义新的数据 类型名
2019/2/17
前面学习的数据类型都属于简单数据类型, 实际问题的结构是复杂、多样的,仅用内建 的简单数据类型进行问题描述是不够的。 C语言没有提供表达复杂问题结构的公共数 据类型,但它提供了由用户根据不同问题结 构定制相应数据类型描述的技术机制。 由用户定制的数据类型称为用户自定义数据 类型(User Definition Data Type)。
2字节 20字节 1字节 2字节
分号
2019/2/17
结构体数据类型的信息存储 结构映射实例
… …
4字节
30字节
10.2.2 结构体变量的声明 用结构体数据类型标识符声明的变量称为结 构体变量。注意:遵守先声明、后定义,再 使用的基本原则。 1. 先定义结构体类型,再声明结构体变量 例如: struct student { struct 结构体数据类型名 int nStNo; { char cName[20]; 类型标识符 成员变量名 char cSex; ; int nAge; 类型标识符 成员变量名 ; float fScore; …… char cAddr[30]; }; }; struct 结构体数据类型名 变量名列表; struct student struStu1,struStu2;
2019/2/17
Байду номын сангаас
说明 例如: 又如: birthday birthday struct date student num name 结构体数据类型与结构体变量的区别: { month day year { month day year ❁结构体数据类型不涉及内存分配问题, int num; month; int 结构体变量涉及内存分配问题。 int day; char name[20]; ❁ 结构体数据类型只是定义数据类型,不 int year; struct date 涉及赋值、存取、运算等操作行为; 结 }; { 构体变量涉及操作行为。 struct student int month; { 结构体数据类型的定义可嵌套 int day; int num; 结构体内部的成员变量名与外部的其它变 char name[20]; int year; 量名可相同,不会混淆 (同名屏蔽) struct date birthday; } birthday; 结构体数据类型及变量的作用域与生存期 }stu; }stu;
相关主题