您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第8章结构体与共用体
第十章结构体与联合体《C语言程序设计》第十章结构体与联合体本章主要内容:10.1概述10.2结构体定义及引用10.3结构体数组10.4结构体变量指针10.5**结构体与函数10.6联合体10.7**枚举类型10.8用typedef定义新类型名本章重点:结构体的定义及应用《C语言程序设计》10.1概述当有一批相同类型的数据时,使用数组来处理。当这些数据的类型不相同时,就无法使用数组。如:1001、李小明、男、18、90.0其中每一项称为数据项。由于各个数据项的数据类型不完全相同,用数组就无法表示。在C语言里把类似这样的数据结构用结构体进行描述。结构体类型相当于其它语言的“记录”类型。《C语言程序设计》9.2结构体的定义及引用一.结构体定义格式——完整格式struct结构体名{成员说明1;成员说明2;……}结构体变量表;如:structSTUDENT{intnum;charname[10];intage;}s1,s2;数组《C语言程序设计》9.2结构体的定义及引用一.结构体定义格式——仅定义结构体类型struct结构体名{成员说明1;成员说明2;……};如:structSTUDENT{intnum;charname[10];intage;};structSTUDENTs1,s2;数组《C语言程序设计》9.2结构体的定义及引用一.结构体定义格式——无名结构体struct{成员说明1;成员说明2;……}结构体变量表;如:struct{intnum;charname[10];intage;}s1,s2;数组《C语言程序设计》二.结构体变量1.结构体变量的内存分配如有:structSTUDENT{intnum;charname[10];intage;}s1;共占2+10+2=14个字节。数组《C语言程序设计》结构体的成员可以是结构体,如:structDATE{intyear;charmonth;charday;};structSTUD{intnum;charname[10];structDATEbirthday;}t;《C语言程序设计》2.结构体变量的引用一般格式结构变量.成员名(*结构指针变量).成员名结构指针变量-成员名这三种用于表示结构成员的形式是完全等效的。如:structSTUDt;t.num=1001;strcpy(t.name,.”ChenHao”);t.birthday.year=1985;t.birthday.month=9;t.firthday.day=20;《C语言程序设计》三.结构体变量的初始化例10.1结构体变量的初始化structSTUDENT{intnum;charname[10];floatscore;}a={1001,”LiMing”,90.5};/*全局结构体变量*/main(){/*局部结构体变量*/structSTUDENTb={1002,”ZhaoLi”,93.0};printf(“a:%d,%s,%f\n”,a.num,a.name,a.score);printf(“b:%d,%s,%d,%f\n”,b.num,b.name,b.score);}《C语言程序设计》10.3结构体数组例10.2结构体数组structSTUDENT{intnum;charname[10];floatscore;};main(){structSTUDENTstud[3];inti;for(i=0,i3;i++)scanf(“%d,%s,%f”,&stud[i].num,stud[i].name,&stud[i].score);for(i=0,i3;i++)printf(“%d,d,%s,%5.1f\n”,i,stud[i].num,stud[i].name,stud[i].score);}数组《C语言程序设计》对于结构体数组同样可以初始化。如:structSTUDENTstud[3]={{1001,”LiMing”,’M’,20,90.5},{1002,”ZhaoLi”,’F’,19,95.0};{1003,”WangLin”,’M’,19,93.0}};《C语言程序设计》10.4结构体变量指针一.结构体指针的说明形式struct结构体名*结构体指针变量名;如:structSTUDENTa,*p;p=&a;二.通过指针访问结构体变量的成员:格式一:(*结构体变量名).成员名格式二:结构体变量名-成员名如:(*p).num=1001;strcpy(p-name,”LiMing”);《C语言程序设计》例10.3结构体指针structSTUDENT{intnum;charname[10];floatscore;};main(){structSTUDENTa={1002,”ZhaoLi”,93.0},*p;p=&a;printf(“%d,%s,%f\n”,a.num,a.name,a.score);printf(“%d,%s,%f\n”,(*p).num,(*p).name,(*p).score);printf(“%d,%s,%f\n”,p-num,p-name,p-score);}《C语言程序设计》三.指向结构体数组的指针如:structSTUDENTstud[5],*p;p=stud;p++;p=&stud[3];p-score=92.5;[例10.4]用结构体数组指针访问结构体数组numnamescorenumnamescorenumnamescorenumnamescorenumnamescorestud[0]stud[1]stud[2]stud[3]stud[4]pstud92.5《C语言程序设计》10.6共用体定义形式为:union共用体名{成员说明1;成员说明2;……}共用体变量表;如:unionDATA{inta;charb;floatc;}d1,d2;unionDATAd3;abc565共用体变量的成员,在某一时刻只有一个成员是可引用的。#includestdio.hmain(){union{inta;charb;}d1;d1.a=5;d1.b='a';printf(%d,%c,d1.a,d1.b);getch();}只说明类型无名联合内存分配成员引用《C语言程序设计》10.7**枚举类型枚举类型的定义一般形式:enum枚举名{枚举常量表}枚举类型变量名表;如:enumWEEKDAY{sun,mon,tue,wed,thu,fri,sat}w1,w2;enumCOLOR{red,blue,green}color1,color2;enumWEEKDAYw;enumCOLORa,b,c;[例10.10]计算下一个工作日(五天工作制)《C语言程序设计》10.8用typedef定义新类型名typedef的一般格式为:typedef旧类型名新类型名;如:typedefstructSTUDENTStud;typedefenumWEEKDAYWeekDay;则:Studstu;/*与structSTUDENTstu;等价*/WeekDayw;/*与enumWEEKDAYw;等价*/《C语言程序设计》如果不能正确打开一个文件,该函数返回空指针(NULL)。所以,该函数的典型用法为:if((fp=fopen(“a:\\test\\t1.txt”,”r”))==NULL){printf(“文件打不开\n”);exit(1);}……/*打开成功,则处理文件*/《C语言程序设计》一.文件的打开在使用文件之前,要事先建立好内部文件(文件指针)与外部文件的联系,这是通过打开文件来实现的。文件打开的一般格式为:fp=fopen(文件名,打开方式);如:FILE*f1,*f2,*f3;f1=fopen(“a:\\test\\t1.txt”,”r”);f2=fopen(“data.txt”,”w+”);f3=fopen(“student.dat”,”ab”);11.3文件的打开与关闭打开方式:r—以只读方式打开w—以只写方式打开a—以添加方式打开附加字符:b—用在r、w、a方式后面,打开的是二进制文件。+—用在打开方式最后。是指打开的文件既可以读,又可以写。
本文标题:第8章结构体与共用体
链接地址:https://www.777doc.com/doc-3650571 .html