预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共40页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

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

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

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

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

第九章结构体与共用体在实际问题中,一组数据往往具有不同的数据类型。例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。因为一个数组中只能存放同一种数据类型的数据,故不能用一个数组来存放这一组数据;如单独定义为互相独立的简单变量,难以反映它们之间的内在联系。9.1结构体9.1.1结构类型定义和结构变量说明例structstudent {intnum; charname[20]; charsex; intage; floatscore; charaddr[30]; };二、结构体变量说明定义结构体类型的同时定义结构体变量 一般形式:直接定义结构体变量 一般形式:说明 结构体类型与结构体变量概念不同 类型:不分配内存;变量:分配内存 类型:不能赋值、存取、运算;变量:可以 结构体可嵌套9.1.2结构体变量的引用 引用规则 结构体变量不能整体引用,只能引用变量成员 一、结构体变量的赋值struct结构体名 { 类型标识符成员名; 类型标识符成员名; ……………. }; struct结构体名结构体变量={初始数据};形式二:形式三:9.1.3结构体数组 结构体数组的定义 三种形式:结构体数组初始化例统计后选人选票9.1.4结构体和指针 指向结构体变量的指针 定义形式:struct结构体名*结构体指针名; 例structstudent*p;指向结构体数组的指针在上例中,可使用的是(*p).num这样的形式。(*p)表示p指向结构体变量,(*p).num是p指向的结构体变量中的成员num。注意:*p两侧的括弧不可省。9.2共用体定义一个联合类型的一般形式为: union联合名 { 成员列表; }; 成员的一般形式:类型说明符成员名结构体与共用体 区别:存储方式不同二、联合变量的说明三、联合变量的赋值和使用intn,i; for(i=0;i<2;i++) { printf("inputname,age,jobanddepartment\n"); scanf("%s%d%c",body[i].name,&body[i].age,&body[i].job); if(body[i].job=='s') scanf("%d",&body[i].depa.class); else scanf("%s",body[i].depa.office); } printf("name\tagejobclassoffice\n"); for(i=0;i<2;i++) { if(body[i].job=='s') printf("%s\t%3d%3c %d\n",body[i].name,body[i].age,body[i].job,body[i].depa.class); else printf("%s\t%3d%3c %s\n",body[i].name,body[i].age,body[i].job,body[i].depa.office); } } 9.3枚举如果枚举没有初始化,即省略"=整型常数"时,则从第一个标识符开始,顺序给每个标识符一个序列号0,1,2,...。但当枚举中的某个成员赋值后,其后的成员则按此数值依次加1作为其序列号。注意: 1.枚举中每个成员(标识符)结束符是",",不是";",最后一个成员可省略","。 2.初始化时可以赋负数,其后的标识符仍依次加1。 3.枚举变量只能取枚举说明结构中的某个标识符常量。 例如: enumstring{x1=5,x2,x3,x4,}; enumstrigx=x3; 此时,枚举变量x实际上是7。 9.4自定义数据类型 功能:用自定义名字为已有数据类型命名 类型定义简单形式:typedeftypename;typedef定义类型步骤 按定义变量方法先写出定义体如inti; 将变量名换成新类型名如intINTEGER; 最前面加typedef如typedefintINTEGER; 用新类型名定义变量如INTEGERi,j;本章结束!9.1.5结构体与链表假设我们把两个变量定义成structentry类型如下: structentryn1,n2; 执行下列语句可使n1结构的next指针指向n2结构。 n1.next=&n2;【例9.7】 #include<stdio.h> main() { structentry { intvalue; structentry*next; }; structentryn1,n2,n3; inti; n1.value=100; n2.value=200; n3.value=300; n1.next=&n2; n2.next=&n3; i=n1.next->value; printf(“%d