神一样的C课件结构体与共用体

上传人:E**** 文档编号:91093351 上传时间:2019-06-21 格式:PPT 页数:57 大小:335KB
返回 下载 相关 举报
神一样的C课件结构体与共用体_第1页
第1页 / 共57页
神一样的C课件结构体与共用体_第2页
第2页 / 共57页
神一样的C课件结构体与共用体_第3页
第3页 / 共57页
神一样的C课件结构体与共用体_第4页
第4页 / 共57页
神一样的C课件结构体与共用体_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《神一样的C课件结构体与共用体》由会员分享,可在线阅读,更多相关《神一样的C课件结构体与共用体(57页珍藏版)》请在金锄头文库上搜索。

1、第七章 结构体与共用体,高级语言程序设计,本章主要内容,本章介绍:如何自己构造数据类型(构造型数据) 结构体 内存分配函数 共用体 枚举类型 类型定义,C(C+)数据类型,一、结构体,1概述 数 组 是构造类数据,其数组元素必须是同一数据类型的。 结构体 也是构造类数据,但其成员可以是任何类型的。 构造类型使用户可以象处理单个变量一样来处理复杂的数据结构。,诸如学生花名册、通讯录之类的数据,最适合用结构体来处理。因为这类数据具有如下特点: 每个人信息都是一个复合的构造数据,如由姓名、学号、性别、年龄、家庭住址、联系电话等“成员”组成。 不同的人,数据的值不同,但都有共同的成员组成。,使用结构体

2、的一般步骤,根据问题的要求定义一个结构体类型 用自己定义的结构体类型定义结构体变量 在程序中使用结构体变量处理问题 比较普通变量的情况: 用系统给定的数据类型定义变量 在程序中使用变量处理问题,如何定义结构体类型?,struct 结构体名 类型标识符 成员名; ;,关键字 用户指定,/*struct 结构体名合称“结构类型标识符”*/,/*成员表列*/,/*此处分号不能省略*/,一个示例,【例一】 main() struct student int number; char name6; char sex; int age; char address20; ; ,本质上,它定义了一个名为”st

3、udent”的“结构体类型”(表头)。,小结:什么是“结构体类型”?,用户自己定义的构造型数据类型 由若干数据项(成员)组成 同一结构体中的成员可以具有不同的数据类型 注意成员定义与普通变量定义的区别: 成员定义时不为其分配内存 变量定义时为其分配内存,结构体类型的特点:,组成结构体的成员本身必须是一种已有定义的数据: 基本类型成员(整型/字符型/实型) 指针类型成员 数组类成员 其他构造类成员(包括已定义的另一种结构体)P262 注意:成员变量,故成员名可与变量名同名 P263 结构体类型可以有千千万万种,表示由若干不同数据项组 成的复合类型。 定义结构体类型时,系统不会为该结构体分配内存(

4、只是定义类型,而非变量声明),2、结构体类型变量的定义,定义了以上结构体类型后,struct student 相当于标准数据类型关键字char, int ,float我们可以用它来定义“结构体变量”。 在结构体类型定义后,用 struct 结构体名 复合词定义 struct 结构体名 ; struct 结构体名 变量名1,变量名2, 变量名n; 如:struct student a,b30,*p; a 为struct student类型的变量 b 为struct student类型的数组(每个元素都是一个结构 体变量,都有众成员) p 为指向struct student类型的指针变量,还有两种

5、合二为一方法, 在定义结构体类型的同时定义结构体类型变量 struct 结构体名 变量名1,变量名2, 变量名n; 直接定义结构体类型变量 struct 变量名1,变量名2, 变量名n;,实际使用中,还可以使用以下形式: 先定义 #define STU struct student 尔后 STU student1,student2;,【例二】定义结构体类型的同时定义结构体类型变量。 main() struct student int number; char name6; char sex; int age; char address20; a,b30,*p; ,【例三】不定义结构体类型,直接

6、定义结构体类型变量。 main() struct int number; char name6; char sex; int age; char address20; a,b30,*p; ,其他有关知识,实际使用中,还可以使用以下形式: #define STU struct student STU stu1,stu2; 比较一下两种变量定义方式的异同: int a,b,c; 定义三个整型变量,每个变量占二个字节,可单独赋值。 struct student a,b,c; 定义三个结构体类型变量,每个变量下有若干“成员”。其占用的内存长度等于各成员项长度之和。,示例,【例四】 main() str

7、uct student int number; char name6; char sex; int age; char address20; ; printf(“%dn “,sizeof(struct student); ,结果: 31,示例,【例五】若有以下定义,则正确的赋值语句为 。 struct complex float real; float image; ; struct value int no; struct complex com; val1; A) com.real=1; B) plex.real=1; C) .real=1; D) val1.real=1;,答案:C).r

8、eal=1,3、结构体变量的初始化和赋值,使一个结构体变量获得数据“值”(实际上是给其各个成员赋值)有三种方法: 定义时初始化之 用赋值语句对各成员分别赋值 同类型的结构体变量间相互赋值 如 student1=student2,示例: 定义时初始化之,【例六】 main() struct char name15; char class12; long num; stu=“Wenli“,“Computer“,200113; printf(“%sn%sn%ldn“,stu.name,stu.class,stu.num); ,结果:Wenli Computer 1 200113,示例: 用赋值语句对

9、各成员分别赋值,【例七】 main() struct char name15; char class12; long num; stu=“Wenli“,“Computer“,200113; stu.name0=1; stu.class2=A; stu.num=1111; printf(“%s,%s,%dn“,stu.name,stu.class,stu.num); ,结果: 1enli,CoAputer,1111,示例: 用赋值语句对各成员分别赋值,【例七】 main() struct char name15; char class12; long num; stu=“Wenli“,“Comp

10、uter 1“,200113; stu.name0=1; stu.class2=A; stu.num=1111; printf(“%s,%s,%dn“,stu.name,stu.class,stu.num); ,结果: 1enli,CoAputer,1111,进行所谓“结构体变量赋值”只能逐个成员进行,不能将结构体变量作为一个整体进行输入和输出。如对结构体变量stu,以下语句是错误的: scanf(“%s,%s,%ld”,stu); printf(“%s,%s,%ld”,stu);,正确编程: main() struct char name15; char class12; long num;

11、 stu; scanf(“%s“,stu.name); scanf(“%s“,stu.class); scanf(“%ld“, ,亦可用以下赋值语句: strcpy(stu.name,”wenli”); strcpy(stu.class, “Computer”); stu.num=200113;,为什么啊?,但是如果改为stu.name=”wenli”是错误的。,4、结构体变量的引用,只能引用其成员变量 用圆点(成员运算符)优先级最高 如 val1.no+ sum=.real+.image 可以将成员变量按普通变量运算方式处理,包括取地址: &val1 (函数间传递用) &val1.no 对多

12、级结构体,只能对最低级的成员进行赋值、存取及运算处理。,示例,以下函数getdays( )计算某年某月某日是该年的第几天。如2001年2月5日是该年的第36天。闰年的二月有29天,表达式“(year%4=0&year%100!=0)|(year%400)=0”值为真,即为闰年,其中year表示年号。,示例,#include “stdio.h“ struct datetp unsigned year,month,day; ; unsigned months =0,31,28,31,30,31,30,31,31,30,31,30,31; main() struct datetp d; printf

13、(“请输入年 月 日:“); scanf(“%u%u%u“, ,答案:【1】&d.day 【2】struct datetp 【3】monthsi,5、结构体数组,定义 P265 定义结构体后定义 定义结构体时同时定义,定义结构体后定义 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu3;,定义结构体时同时定义 struct student int num; char name20; char sex; int age; float scor

14、e; char addr30; stu3;,5、结构体数组,初始化 P266 一般初始化 省略维数 定义后初始化,一般初始化 struct student int num; char name20; char sex; int age; float score; stu3= 10101,“李宁“,M,18,87.5, 10102,“张凡“,M,19,99, 10103,“王敏“,F,20,78.5 ;,定义后初始化 struct student int num; char name20; char sex; int age; float score; ; struct student stu3

15、= 10101,“李宁“,M,18,87.5, 10102,“张凡“,M,19,99, 10103,“王敏“,F,20,78.5 ;,一般初始化示例,main() struct student int num; char name20; char sex; int age; float score; stu3= 10101,“李宁“,M,18,87.5, 10102,“赵凡“,M,19,99, 10103,“王敏“,F,20,78.5 ; int i; clrscr(); for (i=0;i3;i+) printf(“%s,学号%d,成绩:%.2fn“,stui.name,stui.num,stui.score); ,试一试运行结果,这里面的花括号能不能去掉?,6、指向结构体类型的指针,一个结构体变量的指针就是该变量所占据的内存段的起始地址。 如 struct student stu; s

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号