《其他数据类型》PPT课件.ppt

上传人:tia****nde 文档编号:11501989 上传时间:2020-04-26 格式:PPT 页数:54 大小:291.50KB
返回 下载 相关 举报
《其他数据类型》PPT课件.ppt_第1页
第1页 / 共54页
《其他数据类型》PPT课件.ppt_第2页
第2页 / 共54页
《其他数据类型》PPT课件.ppt_第3页
第3页 / 共54页
点击查看更多>>
资源描述
第6章其他数据类型,学习目标,结构体的定义与使用结构体与指针共用体的定义与使用枚举类型的定义与使用typedef定义数据类型位运算规则,6.1结构体,引入:数据的基本类型:整、实、字符。数组是构造类型:每个元素为同一类型,有些问题仅用基本类型和数组来描述是无法实现的?,举例:如学生情况表,这些数据类型虽不相同,但它们却是有机的整体,若将它们分别定义,则难以反映它们之间的内在联系。如何解决呢?用结构体。,结构体是一种构造数据类型用途:把不同类型的数据组合成一个整体,又称自定义数据类型结构体类型定义,struct结构体类型名类型标识符成员名;类型标识符成员名;,成员类型可以是基本型或构造型,struct是关键字,不能省略,合法标识符,可根据情况省略,6.1.1结构体类型的定义,Structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;,结构体类型定义,描述结构的组织形式,不分配内存,以上语句的作用是:定义了一个名为student的结构体类型,它具有以下结构:,6.1.2结构体变量,(1)结构体类型变量的声明间接法:先声明结构体类型再定义变量名,struct结构体名类型标识符成员名;类型标识符成员名;struct结构体名变量名表列;,直接法:在声明结构体类型的同时定义变量,struct结构体名类型标识符成员名;类型标识符成员名;.变量名表列;,structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,stu2;,structintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,stu2;,省去结构体类型名,用无名结构体直接定义变量只能一次。,说明:1.结构体类型与结构体变量概念不同2.结构体可嵌套,sturctdateintmonth;intday;intyear;,structstudentintnum;charname20;charsex;structdatebirthday;floatscore;charaddr30;student1,student2;,说明:3.结构体成员名与程序中变量名可相同,不会混淆(2)结构体变量的引用:结构体变量.成员如:student1.num=1;strcpy(student1.name,“ZhangHua);student1.sex=M;student1.birthday.year=1980,如果某成员本身又是一个结构体类型,则要用若干个成员运算符,一级一级找到最低一级的成员。成员运算符“.”的结合性为从左到右。如:student1.birthday.year结构体变量的成员可以像普通变量一样进行各种运算。例如:student1.birthday.day+;sum=student1.score+5;,可以引用结构体变量成员的地址,也可以引用结构体变量的地址。如:,struct结构体类型名类型标识符成员名;类型标识符成员名;.;struct结构体名结构体变量=初始数据;,structssintnum;charname20;charsex;intage;charaddr30;structssstu1=112,“WangLin”,M,19,“200BeijingRoad”;,(3)结构体变量的初始化,形式二:,struct结构体类型名类型标识符成员名;类型标识符成员名;.结构体变量=初始数据;,structssintnum;charname20;charsex;intage;charaddr30;stu1=112,“WangLin”,M,19,“200BeijingRoad”;,结构体类型名ss可以省略,(4)求结构体变量占用内存的大小求变量或类型说明符占用内存大小可以使用sizeof运算符。sizeof是单目运算符,其功能是求出变量或类型说明符所占的内存空间的字节数。使用的一般形式为:sizeof(变量或类型说明符);,charstr20;structdateintyear,month,day;today;structaddresscharname30,street40,city20;unsignedlongintzip;wang;printf(char:%dt,sizeof(char);printf(str:%dt,sizeof(str);printf(date:%dt,sizeof(structdate);printf(wang:%dn,sizeof(wang);,6.1.3结构体数组,(1)定义结构体数组:三种形式,形式一:structstudentintnum;charname20;charsex;intage;structstudentstu2;,形式二:structstudentintnum;charname20;charsex;intage;stu2;,形式三:structintnum;charname20;charsex;intage;stu2;,(2)结构体数组的初始化,structintnum;charname20;charsex;intage;stu.=.,.,.;,(3)结构体数组元素、成员引用引用方式:结构体数组名下标.成员名,structstudentintnum;charname20;charsex;intage;str3;,stu1.age+;,strcpy(stu0.name,”ZhaoDa”);,#include#includestructpersoncharname20;intcount;lead3=Li,0,Zhang,0,Wang,0;voidmain()inti,j;charleader_name20;for(i=1;i=10;i+)/10张选票scanf(%s,leader_name);for(j=0;j”用于结构体指针变量访问成员。使用中要注意两者的优先级与结合性问题。,p-n得到p指向的结构体变量中的成员n的值。p-n+得到p指向的结构体变量中的成员n的值,用完该值后使它加1。+p-n得到p指向的结构体变量中的成员n的值使之加1(先加)。,构造数据类型,也叫联合体几个不同类型的变量共占一段内存(相互覆盖)定义形式,6.3共用体,union共用体类型名类型标识符成员名;类型标识符成员名;.;,除去关键字,其形式和结构体定义一致,uniondatacharch;inti;floatf;,uniondatainti;charch;floatf;a,b;,uniondatainti;charch;floatf;uniondataa,b,c,*p,d3;,共用体变量的定义:,由于是共用一段内存,因此:共用体变量任何时刻只有一个成员存在共用体变量定义分配内存长度是最长成员所占字节数,共用体变量引用,uniondatainti;charch;floatf;uniondataa,b,c,*p,d3;,a.i,a.ch,a.fp-i,p-ch,p-f(*p).i,(*p).ch,(*p).fp-i,p-ch,p-fd0.i,d0.ch,d0.f,共用体变量名.成员名(*共用体指针名).成员名共用体指针名-成员名,注意:共用体变量中起作用的成员是最后一次存放的成员共用体变量的地址和它的各成员的地址都是同一地址。不能引用共用体变量,只能引用其成员不能在定义共用体变量时初始化可以用一个共用体变量为另一个变量赋值,unioninti;charch;floatf;a;a=1;(),a.i=1;a.ch=a;a.f=1.5;printf(“%d”,a.i);(编译通过,运行结果不对),unioninti;charch;floatf;a=1,a,1.5;(),floatx;unioninti;charch;floatf;a,b;a.i=1;a.ch=a;a.f=1.5;b=a;()x=a.f;(),union/定义共用体并说明共用体变量mixlongi;intk;charii;chars4;mix;mix.i=0 x12345678;printf(mix.i=%lxn,mix.i);printf(mix.k=%xn,mix.k);printf(mix.ii=%xn,mix.ii);printf(mix.s0=%xtmix.s1=%xn,mix.s0,mix.s1);printf(mix.s2=%xtmix.s3=%xn,mix.s2,mix.s3);,例6.8分析以下程序的运行结果。,变量的各成员同时存在,任一时刻只有一个成员存在,结构体与共用体区别:存储方式不同联系:两者可相互嵌套,6.4枚举类型,概念:“枚举”是指将变量的值一一列举出来,变量的取值只限于列举出来的值的范围。定义:enum枚举类型名取值表;变量定义:enumcolourRed,Blue,Yellow,White;enumcolourc1,c2;c1,c2为枚举型变量,其值可以取括号中的任意一个。c1=Yellow;()c2=White;()c1=Black;()c2=2;(),说明(1)对枚举元素按常量处理,故称枚举常量。枚举常量是有值的,编译时按定义时的顺序依次置为0,1,2,在上面的定义中,枚举元素的值分别为:Red=0,Blue=1,Yellow=2,White=3。(2)不能对枚举常量赋值,要改变枚举常量的值只能在定义时由程序指定。例如:enumcolourRed=10,Blue=0,Yellow,White;则这时Red=10,Blue=0,Yellow=1,White=2。当定义枚举变量enumcolourc1,c2;后,若给枚举变量赋值:c1=Red;则枚举变量c1中的值为10c2=White;则枚举变量c2中的值为2。,6.5用typedef定义类型,功能:用自定义名字为已有数据类型命名形式:typedeftypename;,类型定义语句关键字,已有数据类型名,用户定义的类型名,若有:typedefintINTEGER;typedeffloatREAL;则:INTEGERi,j;等价于inti,j;REALpai;等价于floatpai;,typedef常用于结构体类型的定义:typedefstructintmonth;intday;intyear;DATE;声明新类型名DATE,它代表上面指定的一个结构体类型。DATEbirthday,*p;,类型定义后,与已有类型一样使用,typedef也可用于数组和指针类型的定义:typedefintARR20;ARRa,b,d;等价于:inta20,b20,d20;typedefint*point;pointp1,p2;等价于:int*p1,*p2;,说明:1.typedef没有创造新数据类型2.typedef是定义类型,不能定义变量3.typedef与define不同4.typedef可以嵌套,typedefstructclubcharname20;intsize;intyear;GROUP;typedefGROUP*PG;PGpclub;,GROUP为结构体类型,PG为指向GROUP的指针类型,等价于:structclubcharname20;intsize;intyear;*pclub;,6.6位运算及位字段,位运算符和位运算位运算举例,6.6.1位运算符和位运算,前面介绍的各种运算都是以字节作为最基本位进行的。但在很多系统程序中常要求在位(bit)一级进行运算或处理。语言提供了位运算的功能,这使得语言也能像汇编语言一样用来编写系统程序。按位与a=a):运算规则:a=an将a中所有位向右移动n位。作用:相当于除法运算。每右移一位相当于除以2。注意数的符号问题(即正负的问题)对于无符号数(正数)右移时高位补以0。对于有符号数,高位为0(正数)右移时高位补以0。对于有符号数,高位为1(负数)时:右移时高位补以0,称之为“逻辑位移”。右移时高位补以1,称之为“算术位移”。TC采用“算术位移”,高位补以1。,7、不同长度的数据进行位运算时的规则规则:如果两个不同长度的数据(例如char型和int型)进行位运算,系统将会对二者进行处理:先将两个运算数按右端对齐,再将较短的一个运算数往高位扩充,即无符号数和正整数左侧用0补齐;负数左侧用1补齐,最后按位进行位运算。,8、位运算的复合赋值运算符:ascanf(%o,将要取的49位移到最右端,即将a右移4位,设置一个低6位全为1,其余全为0的数0:000000000000:1111111111106:11111000000(0两边必须都是整型数,否则非法。如a2.0是错误的。不同长度的变量进行位运算时,系统会自动右对齐,而左端的不齐部分,会按最高位进行扩展。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!