第14章 结构体、共用体和用户定义类型.ppt_第1页
第14章 结构体、共用体和用户定义类型.ppt_第2页
第14章 结构体、共用体和用户定义类型.ppt_第3页
第14章 结构体、共用体和用户定义类型.ppt_第4页
第14章 结构体、共用体和用户定义类型.ppt_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第14章结构体、共用体和用户定义类型,第14章结构体、共用体和用户定义类型,14.1用typedef说明一种新类型名14.2结构体类型14.3共用体,14.1用typedef说明一种新类型名,除了可以直接使用C提供的标准类型名(如int、char、float、double、long等)以外,还可以用typedef声明新的类型名来替代已有的类型名。实质上typedef命令就是给我们以前的类型进行起外号。,说明新类型名的语句一般形式为:typedef类型名标识符,可以用标识符来代替已有的类型名来使用。标识符其实就是类型名的一个(外号)替身。,例如:typedefintINTEGER;,它也能用来定义整型,INTEGERm,n;,intm,n;,14.2结构体类型定义,结构体和我们前面所说的数组有点相同,都是由若干个成员所组成.数组只不过是相同类型的元素的集合,而结构体中的各个成员的类型可以不同.,结构体类型说明的一般形式为:struct结构体标识名类型名1结构成员名表1;类型名2结构成员名表2;:类型名n结构成员名表n;,说明结构体类型的关键字,用户定义的标识符,在说明中也可以不出现,分号不能少,例如:structstudentcharname12;charsex;intyear,month,day;floatsc4;,接着我们就structstudent类型来定义变量.数组和指针变量了,structstudentstd,pers3,*pstd,如上是用结构体类型structstudent定义了一个结构体变量std,结构体数组pers和一个结构体指针变量pstd.,其中:,1.结构体变量std所占的内存空间就为左边说明语句中的各成员的总和.2.结构体数组pers中含有3个元素,每一元素其实也就是一个结构体变量.3.结构体指针变量pstd只能被赋予结构体变量的地址,也就是说pstd只能指向结构体.,结构体变量.数组和指针变量的定义方式还有3种,转去介绍,14.2结构体类型结构体变量的定义,结构体变量.数组和指针变量的另外3种定义方式如下:,第2种:紧跟在结构体类型之后进行定义structstudentcharname12;charsex;intyear,month,day;floatsc4;std,pers3,*pstd;,跟前一种方式唯一的区别就是:这一种是在说明结构体的同时进行定义的,而上一种只是先说明好了结构体,然后再进行定义的.,第3种:struct后面的标识符也可以省略structcharname12;charsex;intyear,month,day;floatsc4;std,pers3,*pstd;,功能和第2种完全相同,不过此种定义方式有一种坏处,坏处只在于:第2种不仅可以在说明结构体的同时进行定义.以后还可以用结构体类型structstudent再次进行定义变量等,而此种就不可以再次进行定义了,因为struct不能被称为结构体类型.,第4种:我们也可以在前3种的基础之上再加上:typedef结构体类型部分标识符,例如:typedefstructcharname12;charsex;intyear,month,day;floatsc4;STREC;,STREC其实就是结构体类型的一个替身。之后我们就可以用STREC来定义变量和数组了.,比如:STRECstd,pers3,*pstd;,14.2结构体类型给结构体变量和数组赋初值,1.给结构体变量赋初值,structstudentcharname12;charsex;intyear,month,day;floatsc4;std=“LiMing”,M,1962,5,10,88,76,85.5,90;,变量std在内存中的形式如下图:,LiMingM196251088.076.085.590.0,namesexyearmonthdaysc0sc1sc2sc3,std,2.给结构体变量和数组赋初值,给结构体数组赋初值,structbookcardcharnum5;floatmoney;bk3=“NO.1”,35.5,“NO.2”,25.0,“NO.3”,66.7;,bk0,bk1,bk2,14.2结构体类型给结构体变量和数组赋初值,14.2结构体类型引用结构体变量中的数据,引用(使用)结构体变量中的数据:结构体变量名.成员名,例如:给出如下定义和语句:structstudentcharname12;charsex;intyear,month,day;floatsc4;std,arr5,*ps;ps=,引用结构体变量std中的sex成员的形式有,std.sexps-sex(*ps).sex,请问,如何引用结构体数组arr的第0个元素arr0中的sex成员?如何引用结构体变量std中的数组成员sc中的元素sc2?,arr0.sex,std.sc2ps-sc2(*ps).sc2,题目,若有以下说明和语句,则对结构体变量st中成员i的引用方式不正确的是structstuinti;intname;st,*p;p=,Ast.iB*p.iC(*p).iDp-i,B,1)以下对相应变量中的name成员所进行的操作都是合法的:scanf(%s,);或gets();pstd=,2.对结构体变量中的成员进行操作,14.2结构体类型对结构体变量中的成员操作,2)以下对相应变量中的sex成员进行操作:scanf(%c,2.对结构体变量中的成员进行操作,14.2结构体类型对结构体变量中的成员操作,4)以下对相应变量中的成员数组sc中的元素进行操作:for(j=0;jscj);for(i=0;i%d,p-data);p=p-next;while(p!=0);printf(endn);,2)顺序访问链表中各结点的数据域例14.8编写函数print_slist,顺序输出单向链表各结点数据域中的内容,14.2.6利用结构里变量构成链表,在单向链表中插入结点,首先要确定插入的位置当待插结点插在指针p所指的结点之前称为“前插”;当待插结点插在指针p所指的结点之后称为“后插”图示意了“前插”操作过程中各指针的指向图中用s来指向新开辟的结点;用p指向插入的位置;q指向p的前趋结点,3)在单向链表中插入结点,14.2.6利用结构里变量构成链表,#include#includeinsert_snode(SLIST*head,intx,inty)SLIST*s,*p,*q;s=(SLIST*)malloc(sizeof(SLIST);s-data=y;q=head;p=head-next;while(p!=0),3)在单向链表中插入结点例14.9编写函数insert_snode,它的功能是:在值为x的结点前插入值为y的结点,若值为x的结点不存在,则插在表尾,14.2.6利用结构里变量构成链表,为了删除单向链表中的某个结点,首先要找到待删结点的前趋结点,然后将此前趋结点的指针域去指向待删结点的后续结点(q-next=p-next),最后释放被删结点所占存储空间(free(p)即可下图示意了结点的删除操作,4)删除单向链表中的结点,14.2.6利用结构里变量构成链表,14.3共用体,共用体(union)的类型说明和变量的定义方式与结构体的类型说明和变量的定义方式完全相同,不同的是,结构体变量中的成员各自占有自己的存储空间,而共用体变量中的所有的成员占有同一个存储空间.,例如:,structdatainti;charch;floatf;a;,结构体变量a在内存中的形式如下:,占4个字节占1个字节占4个字节,ichf,9,uniondatainti;charch;floatf;a;,共用体变量a在内存中的形式如下:,占4个字节

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论