第十一章结构与联合.ppt
上传人:sy****28 上传时间:2024-09-14 格式:PPT 页数:43 大小:2.6MB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

第十一章结构与联合.ppt

第十一章结构与联合.ppt

预览

免费试读已结束,剩余 33 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第十一章结构类型与其它构造类型§11-1概述§11-1结构类型(续1)§11-1结构类型(续2)§11-1结构类型(续3)在定义了某种类型的结构体后,就可以使用该类型的结构变量。用类型说明语句说明结构变量struct结构体名结构变量名;系统为所说明的结构变量按照结构定义时说明的组成(成员分量),分配存储数据的实际内存单元。例:将变量today说明为date型的结构变量:structdatetoday;说明多个address型的结构变量:structaddresswang,li,zhang;结构变量同样有存储类型,存储特性与一般变量完全相同。结构变量占用内存情况结构变量的各个成员分量在内存中占用连续存储区域,所占内存大小为结构中每个成员的占用内存的长度之和。结构变量today和wang占用在内存的情况如图所示。§11-1结构类型(续6)§11-1结构类型(续6)关于结构类型的说明类型与变量是不同的概念。在定义结构变量时一般先定义一个结构类型,然后定义变量为该类型。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。对结构中的成员,可以单独使用,它的作用与地位相当于普通变量。成员也可以是结构变量。成员名可以与程序中的变量名相同时,二者不代表同一对象。在定义结构时说明结构变量例如:structstudent{intnum;charname[20];charsex;intage;charaddr[30];}student1,student2;直接说明结构变量例如:struct{charname[20];charaddr[30];}zhang;§11-1结构类型(续9)访问结构中的成员是通过成员的名字,称为“按名引用”。在程序中使用结构中成员的方法为:结构变量名.成员名称例:将“92.10.01”送入today,对其各个成员分别赋值:today.year=92;today.month=10;today.day=1;指明结构成员的符号“.”是运算符,含义是访问结构中的成员。“.”操作的优先级在C语言中是最高的。其结合性为从左到右。例:用结构描述一个人的基本情况,可以定义如下结构:structperson/*定义person结构类型*/{charname[30];charsex;structdatebirthday;/*结构的嵌套定义*/}man;输入zhang先生的情况,如生日,可用如下语句:strcpy(man.name,“zhang”);/*注意:不能写成man.name="zhang";*/man.sex=‘M’;/*为结构中的字符成员赋值*/man.birthday.year=1960;man.birthday.month=3;man.birthday.day=28;/*为嵌套定义的结构中的成员赋值*/如果要将“zhang”改为“zhong”,只要将结构变量man中的数组成员name下标为2的元素‘a’改为‘o’即可。可以使用下列语句:man.name[2]='o';/*为结构变量中的数组成员的一个元素赋值*/结构类型的引用说明不能将一个结构变量作为一个整体直接访问。例如已定义student1为结构变量并且已有值。不能这样引用:printf(“%s,%c,%d,%d,%d\n”,student1);如果成员本身又是一个结构类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取等运算。例如,对上面定义的结构变量student1,可以这样访问各个成员:student1.namestudent1.sexstudent1.birthday.monthstudent1.birthday.daystudent1.birthday.year对成员变量可以象普通变量一样进行各种运算。student2.birthday.year=student1.birthday.year;sum=student1.birthday.month+12;student1.age++;++student1.age;可以引用成员的地址,也可以引用结构变量的地址。如:scanf(“%d”,&student1.num);printf(“%p”,&student1);但不能用以下语句整体读入结构变量,如:scanf(“%d,%s,%c,%d,%d,%d,%s”,&student1);例C11_103:输