C语言总结第九章
- 格式:doc
- 大小:60.00 KB
- 文档页数:10
结构体定义结构体定义:由一些不同数据类型的数据组合而成的数据整体,C语言称之为“结构体”数据类型,结构体中所包含的数据元素称之为成员。
结构体的类型定义形式:Struct 结构体名{成员项列表;};注意:末尾处有分号。
例如:struct person{ long no;char name[12];int age;char sex;long indentityno;char education[12];char addr[40];long telno;};Struct为关键字,person为结构体名,no,mame,age,sex,indentityno,education,sddr,telno为成员。
注意:与其他标量不同,定义一个结构体类型,并不意味着系统将分配一段内存单元来存放各个数据项成员。
这时是定义类型而不是定义变量。
他告诉系统该结构由哪些类型的成员构成,并且把他们当作一个整体来处理。
结构体变量定义第一种:先定义了结构体类型,在定义该类型的变量。
格式:类型标识符变量名列表;例如:struct person stu,worker;struct person为类型标识符(类型名)如同用int定义变量一样,其作用于Int类似,可用于定义变量,stu,worker为结构体变量名。
第二种:在定义一个结构体类型的同时定义一个后若干个结构体类型变量。
格式:STRUCT 结构体名{成员项列表;}变量名列表;例如:struct person{ long no;char name[12];int age;char sex;long indentityno;char education[12];char addr[40];long telno;}teacher,doctor;第三种:直接定义结构体类型的变量。
格式:struct{成员项列表;}变量名列表;例如:struct{ long no;char name[12];int age;char sex;long indentityno;char education[12];char addr[40];long telno;}teacher,doctor;这里只定义了teacher和doctor两个变量为结构体类型,但是没有定义该结构体类型的名字,因此不能再用来定义其他的变量。
结构体变量的初始化可以在定义变量的同时给变量的成员赋值。
例如:struct smail{char name[12];Char addr[40];Long zip;Long tel;}teacher={“li ming”,”blut road 18”,430000,88753540};注意:1有包含字母或文字的项时,加双引号。
单个字母时用单引号。
2若结构体的成员中另有一个结构体类型的变量,则初始化时仍然要对各个基本成员赋予初值。
例如:Struct date{int day;Int month;Int year;};Struct person{char name[12];Struct date birthday;Char sex;Long telno;};Struct person doctor={“li ming”,24,3,1970,’m’,88753540};结构体变量成员的引用定义了一个结构体类型的变量后,就可以引用该变量的一个成员,也可以将结构体变量作为一个整体来引用。
(1)引用结构体变量中的成员,格式:结构体变量名.成员名,注意:1不能直接引用成员名,因为成员名并不代表变量。
2若一个结构体类型中含有另一个结构体类型的成员,则在访问该成员时,应该采取逐级访问的方法。
如上例中的:doctor.birthday.day,如果写成doctor.day 就错了。
(2)将结构体变量作为一个整体来使用,若两个变量有相同的结构体类型,则可以将一个结构体变量作为一个整体赋值给另一个结构体变量。
结构体变量成员的输入和输出注意:虽然允许将一个结构体变量作为一个整体来使用,但是吧一个结构体变量作为一个整体进行输入和输出是错误的。
例如:struct{char name[14];Char addr[20];Long zip;}stud={“li ming”,”321 nanjing road”,430000};正确:scanf(“%s%s%1d”,&,&stud.addr,&stud.zip);Printf(“%s,%s,%1d\n”,,stud.addr,stud.zip);或者:Gets()/*输入一个字符串给*/Puts()/*将中的字符串输出到屏幕*/结构体数组1结构体数组的定义结构体数组的定义与结构体变量的定义方法相同,三种方法:(1)先定义结构体,再定义结构体数组。
STRUCT 结构体名{成员项列表;};STRUCT 结构体名数组名[数组大小];(2)在定义结构体时,定义结构体数组;STRUCT 结构体名{成员项列表;}数组名[数组大小];(3)直接定义结构体数组,不定义结构体名。
STRUCT{成员项列表;}数组名[数组大小];2结构体数组成员的初始化和引用初始化方式与多维数组相似。
规则也基本相似。
结构体数组的引用完全类似于结构体变量的引用,只是用结构体数组元素来代替结构体变量,其他规则不变。
例如:STU[0].NAME表示引用某一元素的成员。
STU[0]=STU[1];将结构体数组元素当做一个整体来用。
注意:同结构体变量意义结构体数组也不能作为一个整体进行输入和输出,只能以单个成员为对象进行输入和输出。
结构体变量与函数1函数的形参和实参为结构体#include<stdio.h>#include<conio.h>#include<stdlib.h>struct booklib{char name[12];int num;float price;float summoney;};void list(struct booklib stubook){stubook.summoney=stubook.num*stubook.price;printf("%-24s%d\t%.2f\t%.f\n",,stubook.num,stubook.price,stubook.summoney);}main(){struct booklib book[4];int i;float total=0;printf("input four books information: name number price\n");for(i=0;i<4;i++){scanf("%s",&book[i].name);scanf("%d%f",&book[i].num,&book[i].price);total=total+book[i].num*book[i].price;}printf("gou shu qingdan:\n");printf("name\tnumber\tprice\ttotal\t");for(i=0;i<4;i++)list(book[i]);printf("total=%.2f\n",total);getch();}2函数的返回值类型为结构体联合体数据类型联合体又称共用体,是不同类型的数据项组成一个整体,这些不同类型的数据项在内存中所占的起始单元是相同的。
格式与结构体完全相同,除了关键字,3中定义方式:(1)UNION 联合体名{成员列表;};UNION 联合体名变量名;(2)UNION 联合体名{成员列表;}变量名列表;(3)UNION{成员列表;}变量名列表;注意:1结构体类型的变量和联合体类型的变量的区别是,联合体的数据项在内存中所占的起始单元是相同的,而结构体变量不是。
2引用方式和结构体变量相同;共用体类型变量名.成员名。
3由于共用体类型变量不同时具有每个成员的值,因此,最后一个赋予它的值就是共用体类型变量的值:#include<stdio.h>union memb{double v;int n;char c;}main(){union memb tag;tag.n=18;tag.c='t';tag.v=36.7;printf("lianhe bianliang tag chengyuan zhi:\n");printf("tag.v=%6.2f\ntag.n=%d\ntag.c=%c\n",tag.v,tag.n,tag.c);getch();}分析程序:尽管对共用体变量成员赋予不同的值,但是只接受最后一个值,即只有v的值是确定的,其他的都不确定。
在用共用体变量时要注意。
4同结构体类型变量相同,不能直接输入和输出共用体类型变量。
5C语言允许同类型的共用体变量之间的赋值:#include<stdio.h>union memb{float v;int n;char c;};main(){union memb tag,sval;tag.n=37;sval=tag;printf("the value of sval is:\n");printf("sval is:%d\n",sval.n);getch();}枚举数据类型枚举是用标识符表示的整数常量的集合,从作用上看,枚举常量是自动设置值的符号常量。
定义格式:ENUM 枚举类型名{标识符1,标识符2,标识符3,,,,};注意:1枚举的起始值为0,例如:ENUM MONTHS{JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC};其中,标识符的值被一次自动设置为整数0到11,2也可以在定义时指定标识符的初始值来改变标识符的取值,例如:ENUM MONTHS{JAN=1,FEB,MAR,APR,MAY,JUN,JULY,AUG,SEP,NOV,DEC}这样,枚举常量的值依次自动设置为整数1到12;3枚举类型定义中的标识符必须是唯一的,可以在枚举类型定义时为每个枚举常量指定不同的值,也可以对中间的某个枚举常量指定不同的值,例如:ENUM CLOLOR{RED,BLUE,GREEN,YELLOW=5,BLACK,WHITE};则,RED=0,BLUE=1,GREEN=2,YELLOW=5,BLACK=6,WHITE=7。