c语言结构体和共用体ppt,c语言知识学习-结构体与共用体.ppt

c8da8f5a7cda2d62dda9e5a200b168b9.gifc语言知识学习-结构体与共用体.ppt

第十一章 结构体与共用体,11.1 结构体 结构体是一种构造数据类型 用途把不同类型的数据组合成一个整体-------自定义数据类型 结构体类型定义,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ;,成员类型可以是 基本型或构造型,struct是关键字, 不能省略,合法标识符 可省无名结构体,例 struct student int num; char name20; char sex; int age; float score; char addr30; ;,结构体类型定义描述结构 的组织形式,不分配内存,结构体类型定义的作用域,struct student a;,例 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2;,11.2 结构体变量的定义 先定义结构体类型,再定义结构体变量 一般形式,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 变量名表列;,例 define STUDENT struct student STUDENT int num; char name20; char sex; int age; float score; char addr30; ; STUDENT stu1,stu2;,定义结构体类型的同时定义结构体变量 一般形式,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . 变量名表列;,例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,直接定义结构体变量 一般形式,struct 类型标识符 成员名; 类型标识符 成员名; . 变量名表列;,例 struct int num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,用无名结构体直接定义 变量只能一次,说明 结构体类型与结构体变量概念不同 类型不分配内存; 变量分配内存 类型不能赋值、存取、运算; 变量可以 结构体可嵌套 结构体成员名与程序中变量名可相同,不会混淆 结构体类型及变量的作用域与生存期,11.3 结构体变量的引用 引用规则 结构体变量不能整体引用,只能引用变量成员,可以将一个结构体变量赋值给另一个结构体变量 结构体嵌套时逐级引用,成员分量运算符 优先级 1 结合性从左向右,引用方式 结构体变量名.成员名,11.4 结构体变量的初始化 形式一,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 结构体变量初始数据;,例 struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1112,“Wang Lin”,M,19, “200 Beijing Road”;,11.5 结构体数组 结构体数组的定义 三种形式,形式一 struct student int num; char name20; char sex; int age; ; struct student stu2;,形式二 struct student int num; char name20; char sex; int age; stu2;,形式三 struct int num; char name20; char sex; int age; stu2;,结构体数组初始化,例 struct int num; char name20; char sex; int age; stu ,,;,顺序初始化 struct student int num; char name20; char sex; int age; ; struct student stu 100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19;,例 struct student int num; char name20; char sex; int age; stu ,,;,结构体数组引用,引用方式 结构体数组名下标.成员名,,例 统计后选人选票,struct person char name20; int count; leader3“Li”,0,“Zhang”,0,”Wang“,0; main int i,j; char leader_name20; fori1;i10;i scanfs,leader_name; forj0;j3;j ifstrcmpleader_name,leaderj.name0 leaderj.count; fori0;i3;i printf5sdn,leaderi.name,leaderi.count; ,11.6 结构体和指针 指向结构体变量的指针 定义形式struct 结构体名 *结构体指针名; 例 struct student *p;,使用结构体指针变量引用成员形式,存放结构体变量在内存的起始地址,指向运算符 优先级 1 结合方向从左向右,,例 指向结构体的指针变量,main struct student long int num; char name20; char sex; float score; stu_1,*p; p ,例 int n; int *p n10,struct student stu1; struct student *p *p.num101,指向结构体数组的指针,,例 指向结构体数组的指针,struct student int num; char name20; char sex; int age; stu310101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20; main struct student *p; forpstu;pnum,p-name,p-sex,p-age; ,用指向结构体的指针作函数参数 用结构体变量的成员作参数----值传递 用指向结构体变量或数组的指针作参数----地址传递 用结构体变量作参数----多值传递,效率低,struct data int a, b, c; ; main void funcstruct data; struct data arg; arg.a27; arg.b3; arg.carg.aarg.b; printfarg.ad arg.bd arg.cdn,arg.a,arg.b,arg.c; printfCall Func....n; funcarg; printfarg.ad arg.bd arg.cdn,arg.a,arg.b,arg.c; void funcstruct data parm printfparm.ad parm.bd parm.cdn,parm.a,parm.b,parm.c; printfProcess...n; parm.a18; parm.b5; parm.cparm.a*parm.b; printfparm.ad parm.bd parm.cdn,parm.a,parm.b,parm.c; printfReturn...n; ,copy,,例 用结构体变量作函数参数,struct data int a, b, c; ; main void funcstruct data *parm; struct data arg; arg.a27; arg.b3; arg.carg.aarg.b; printfarg.ad arg.bd arg.cdn,arg.a,arg.b,arg.c; printfCall Func....n; func ,,例 用结构体指针变量作函数参数,11.8 共用体 构造数据类型,也叫联合体 用途使几个不同类型的变量共占一段内存相互覆盖 共用体类型定义 定义形式,union 共用体名 类型标识符 成员名; 类型标识符 成员名; . ;,例 union data int i; char ch; float f; ;,类型定义不分配内存,形式一 union data int i; char ch; float f; a,b;,形式二 union data int i; char ch; float f; ; union data a,b,c,*p,d3;,形式三 union int i; char ch; float f; a,b,c;,共用体变量的定义,共用体变量定义分配内存, 长度最长成员所占字节数,共用体变量任何时刻 只有一个成员存在,共用体变量引用 引用方式,例 a.i1; a.cha; a.f1.5; printf“d”,a.i; 编译通过,运行结果不对,引用规则 不能引用共用体变量,只能引用其成员,共用体变量中起作用的成员是最后一次存放的成员,例 union int i; char ch; float f; a; a1; ,不能在定义共用体变量时初始化,例 union int i; char ch; float f; a1,a,1.5; ,可以用一个共用体变量为另一个变量赋值,例 float x; union int i; char ch; float f; a,b; a.i1; a.cha; a.f1.5; ba; xa.f; ,,例 将一个整数按字节输出,运行结果 i60501 ch0101,ch1141 ch0A,ch1a,main union int_char int i; char ch2; x; x.i24897; printfion,x.i; printfch0o,ch1on ch0c,ch1cn, x.ch0,x.ch1,x.ch0,x.ch1; ,结构体与共用体 区别 存储方式不同,联系 两者可相互嵌套,,例 结构体中嵌套共用体,struct int num; char name10; char sex; char job; union int class; char position10; category; person2;,,例共用体中嵌套结构体,机器字数据与字节数据的处理,struct w_tag char low; char high; ; union u_tag struct w_tag byte_acc; int word_acc; u_acc;,11.10 用typedef定义类型 功能用自定义名字为已有数据类型命名 类型定义简单形式 typedef type name;,例 typedef int INTEGER;,类型定义语句关键字,已有数据类型名,用户定义的类型名,例 typedef float REAL;,类型定义后,与已有类型一样使用,例 INTEGER a,b,c; REAL f1,f2;,说明 1.typedef 没有创造新数据类型 2.typedef 是定义类型,不能定义变量 3.typedef 与 define 不同,define typedef 预编译时处理 编译时处理 简单字符置换 为已有类型命名,typedef定义类型步骤 按定义变量方法先写出定义体 如 int i; 将变量名换成新类型名 如 int INTEGER; 最前面加typedef 如 typedef int INTEGER; 用新类型名定义变量 如 INTEGER i,j;,例 定义数组类型 int a100; int ARRAY100; typedef int ARRAY100; ARRAY a,b,c;, int a100,b100,c100;,例 定义指针类型 char *str; char *STRING; typedef char *STRING; STRING p,s10;, char *p; char *s10;,例 定义函数指针类型 int *p; int *POWER; typedef int *POWER; POWER p1,p2;, int *p1,*p2;,例 定义结构体类型 struct date int month; int day; int year; d;,例 定义结构体类型 struct date int month; int day; int year; DATE;,例 定义结构体类型 typedef struct date int month; int day; int year; DATE;,例 定义结构体类型 DATE birthday, *p;, struct date int month; int day; int year; birthday, *p;,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值