《c10复杂数据课件》由会员分享,可在线阅读,更多相关《c10复杂数据课件(18页珍藏版)》请在金锄头文库上搜索。
1、 计算机科学与工程学院计算机科学与工程学院 1 1 结构体类型的定义结构体类型的定义2 2 结构体类型的结构体类型的引用引用3 3 共用体类型的共用体类型的定义和引用定义和引用4 4 枚举类型的枚举类型的定义定义5 5 用用typedeftypedef定义类型定义类型结构体与共用体结构体与共用体预处理命令预处理命令c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 l基本类型基本类型整型、实型整型、实型( (单精度、双精度单精度、双精度) )、字符型、枚举类型字符型、枚举类型l构造类型构造类型数组类型、结构体类型、共用体类型数组类型、结构体类型、共用体类型数组类型、
2、结构体类型、共用体类型数组类型、结构体类型、共用体类型l指针类型指针类型l空类型空类型C C语言的数据类型语言的数据类型2c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 v结构体是结构体是一种一种构造构造数据类型数据类型v用途:把用途:把不同类型不同类型的数据组合成一个整体的数据组合成一个整体-自定义自定义数据类数据类型型v结构体类型定义结构体类型定义struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名成员名; .;成员类型可以是成员类型可以是基本型或构造型基本型或构造型struct是是关键字关键字, ,不能省略不
3、能省略合法标识符合法标识符可省可省:无名结构体无名结构体10.2 10.2 结构体结构体 P243P2433c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 struct student int num; char name20; char sex; int age; float score; char addr30; ; namenumsexagescoreaddr2字节字节2字节字节20字节字节1字节字节4字节字节30字节字节.结构体类型定义描述结构结构体类型定义描述结构的组织形式的组织形式,不分配内存不分配内存4c10复杂数据复杂数据PPT课件课件 计算机科
4、学与工程学院计算机科学与工程学院 struct date int month; int day; int year;struct student int no; /*学号学号*/ char name10; /*姓名姓名*/ char sex; /*性别性别*/ struct date birthday; /*年龄年龄*/ float score; /*成绩成绩*/ ;注意:注意: struct student 是一个是一个类型类型 整体,整体, no、name10、sex、age、score、 birthday都是其成员,都是其成员, struct及花括号后的及花括号后的“;”不能省,不能省,
5、其中其中birthday是一个是一个struct date类型的类型的结构体变量结构体变量5c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 定义变量形式:定义变量形式: struct struct 结构体名结构体名 结构体变量名表;结构体变量名表; 1.1.先定义结构体类型,再定义结构体变量先定义结构体类型,再定义结构体变量 例例 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2,stu5; 结构
6、数组结构数组6c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 2. 2. 在定义结构体类型的同时定义变量在定义结构体类型的同时定义变量形式:形式: struct 结构体类型名结构体类型名 类型标识符类型标识符 成员名成员名1; 类型标识符类型标识符 成员名成员名2; 类型标识符类型标识符 成员名成员名n; 变量名表变量名表;struct student char name20; char sex; int age; float score; stu1,stu2,stu5;7c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 3.(3.
7、(不出现结构体名不出现结构体名) )直接定义结构体类型变量直接定义结构体类型变量 struct 类型标示符类型标示符 成员名成员名1; 类型标示符类型标示符 成员名成员名2; 类型标示符类型标示符 成员名成员名n; 变量名表变量名表;struct char name20; char sex; int age; float score; stu1,stu2,stu5;8c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 10.2.2 10.2.2 结构体的引用结构体的引用/ /访问访问变量的使用都必须变量的使用都必须“先定义、后引用先定义、后引用”。v引用规则引用规则
8、 结构体变量结构体变量不能整体引用不能整体引用,只能引用变量只能引用变量成员成员结构体变量名结构体变量名.成员名成员名可以将一个结可以将一个结构体变量赋值给另一个结构体变量构体变量赋值给另一个结构体变量结构体嵌套时结构体嵌套时逐级引用逐级引用成员成员(分量分量)运算符运算符优先级优先级: 1结合性结合性:从左向右从左向右9c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 struct date int month; int day; int year;struct student int num; /*学号学号*/ char name10; /*姓名姓名*/ ch
9、ar sex; /*性别性别*/ struct date birth; /*出生日期出生日期*/ float score; /*成绩成绩*/ stu1,stu2,stu5;struct student *p=&stu1;stu1.num (*p).num p-num stu1.sex (*p).sex p-sexstu1.name (*p).name p-namestu1.score (*p).score p-score引用示例:引用示例:scanf(%f,&stu1.score);stu2.num+;printf(“%s”, stu1.name);scanf(%d,stu1. birth.d
10、ay);stu2=stu1;stu0=stu1;10c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 struct student int num;char name20;char sex;int score; stu1;void main() struct student *p; p=(struct student *)malloc(sizeof(struct student); /* 分配空间分配空间 */ printf(n); gets(p-name); scanf(%d%c%d,&(*p). num),&(p-sex),&(p- score); print
11、f(%d,%s,%c,%dn,(*p).num,p-name,p-sex,p-score); stu1=*p; printf(%d,%s,%c,%d,stu1.num,stu1.name,stu1.sex,stu1.score); 11c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 说明:说明: (1) 结构体类型变量的各结构体类型变量的各成员(分量)成员(分量)必须单独引用必须单独引用,成员运成员运算符算符“”具有最高优先级。具有最高优先级。 (2) (2) 不允许对结构体变量进行不允许对结构体变量进行整体整体的输入输出的输入输出 如:如:scanf(“%s%
12、c%d%f”,&stu1); (3) 如果结构体变量类型相同,可以互相赋值如果结构体变量类型相同,可以互相赋值。 stu1=stu2; (4) 严格区分类型与变量的概念。严格区分类型与变量的概念。 (5) 如果结构体成员本身又是结构体类型的,则可继续使用成如果结构体成员本身又是结构体类型的,则可继续使用成员运算符取结构体成员的结构体成员,逐级向下,员运算符取结构体成员的结构体成员,逐级向下,引用最低一引用最低一级级的成员。的成员。 12c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 10.4 共用体共用体(联合体联合体) P262定义的一般形式:定义的一般形式:
13、 union 共用体名共用体名 成员表列成员表列 变量表列变量表列例如:例如: union data int i;char c;a,b,c; 各成员共用一段空间各成员共用一段空间, 结构体变量所占内存长度结构体变量所占内存长度=最长成员的长度最长成员的长度 a.i=3; a.c=a; 两次赋值最后一次有效两次赋值最后一次有效i, c13c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 10.5 枚举类型枚举类型P271定义的一般形式:定义的一般形式: enum 枚举类型名枚举类型名 枚举元素表枚举元素表 例如:例如: enum weekdaysun, mon,tu
14、e,wed,thu,fri,sat; enum weekday week_end,workday; workday=tue; printf(%d,workday); 14c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 10.6 自定义类型自定义类型typedef P264用用typedef声明新的类型名来代替已有的类型名声明新的类型名来代替已有的类型名如如 typedef float REAL;则则 REAL j float jstruct studentint num; char name20;char sex;int score; ;typedef stru
15、ct student stu;stu s1,s2;typedef int A10;A a; /定义数组定义数组a10/ A为类型名称为类型名称stu为类型名称为类型名称s1,s2是是stu类型的变量类型的变量15c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 习题习题1、设有以下说明语句、设有以下说明语句struct stu int a; float b; stutype;则下面的叙述不正确的是则下面的叙述不正确的是A)struct是结构体类型的关键字是结构体类型的关键字B)struct stu是用户定义的结构体类型是用户定义的结构体类型C)stutype是用户
16、定义的结构体类型名是用户定义的结构体类型名D)a和和b都是结构体成员名都是结构体成员名C C16c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 2、设有以下说明语句、设有以下说明语句typedef struct int n;char ch8; PER;则下面叙述中正确的是则下面叙述中正确的是A)PER 是结构体变量名是结构体变量名B)PER是结构体类型名是结构体类型名C)typedef struct 是结构体类型是结构体类型D)struct 是结构体类型是结构体类型名名 B B3、 设设 有有 定定 义义 “struct int a; float b; char
17、 c; abc, *p_abc=&abc;”,则对结构体成员则对结构体成员a的引用方法可以是的引用方法可以是abc.a和和p_abca。-17c10复杂数据复杂数据PPT课件课件 计算机科学与工程学院计算机科学与工程学院 4、已知学生记录描述为、已知学生记录描述为struct student int no;char name20,sex;struct int year,month,day; birth;struct student s;设设变变量量s中中的的“生生日日”是是“1984年年11月月12日日”,对对“birth”正正确确赋赋值值的的程程序序段是段是A)year=1984; month=11; day=12;B)s.year=1984; s.month=11; s.day=12;C)birth.year=1984; birth.month=11; birth.day=12;D)s.birth.year=1984; s.birth.month=11; s.birth.day=12; D D18c10复杂数据复杂数据PPT课件课件