|
|
第九章 结构体和公用体 §9.1 概述 C语言提供了这样一种数据结构,它称为结构体。例如:
}; 定义一个结构体的一般形式为:
§9.2 定义结构体和共用体变量的方法 要定义一个结构体类型的变量,可以采取以下三种方法。 一、先定义结构体类型再定义变量名
二、在定义类型的同时定义变量
三、直接定义结构类型变量
关于结构体类型,有几点要说明:
§9.3 结构体变量的引用 9.3.1对结构体成员的引用 可用以下三种形式引用结构体变量中的成员: (1)结构体变量名.成员名 (2)指针变量名-〉成员名 (3)(*指针变量名).成员名 §9.4 结构体变量的初始化 一、对外部存储类型的结构体变量进行初始化。
{ printf("No.:%ld\n name:%s\n sex:%c\n,address:%s\n",a.num,a.name,a.sex,a.addr);} 运行结果如下:
address:130 Beijing Road 二、对静态存储类型的结构体变量进行初始化。定义部分也可以放到 main 函数中。
}a={{89031, "Li Lin",'M', "130 Beijing Road"}; printf("No.:%ld\n name:%s\n sex:%c\n address:%s\n",a.num,a.name,a.sex,a.addr); } 三、结构体数组的初始化。 结构体数组只能对全局和静态存储类别的数组初始化。如:
四、举例。 例:对候选人得票的统计程序。设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。
{ int i,j; char leader_name[20]; for (i=1;i<=10;i++) { scanf("%s",leader_name); for (j=0;j<3;j++) if (strcmp(leader_name,leader[j].name) = = 0) leader[j].count++; } printf("\n"); for(i=0;i<3;i++) printf("%5s:%d\n",leader[i].name,leader[i].count); } 运行情况如下:
§9.5 共用体变量的引用方式 一、共同体的概念 有时需要将几种不同类型的变量存放到同一段内存单元中。这种使几个不同的变量共占同一段内存的结构,称为“共同体”类型的结构。 “共同体”类型变量的定义形式为:
变量表列;也可以将类型定义与变量定义分开或者直接定义共同体变量。 例如:下面是几种定义的方式 1. union data 2. union data 3. union { int i; { int i; { int i; char ch; char ch; char ch; float f; float f; float f; } a,b,c; }; } a,b,c; union data a,b,c 二、共同体变量的引用方式
§9.6 枚举类型 如果一个变量只有几种可能的值,可以定义为枚举类型。所谓“枚举”是指将变量的值一一列举出来。变量的值只限于列举出来的值的范围内。 定义枚举类型用enum开头。 例如:enum weekday {sun,mon,tue,wed,thu,fri,sat}; 定义了一个枚举类型enum weekday, 可以用此类型来定义变量。如:enum weekday workday, week_end; workday和week_end被定义为枚举类型,它们的值只能是sun到sat之一。例如: workday = mon; week_end = sun; 是正确的。 说明:
2. 枚举值可以用来作为判断比较。如:if(workday= =mon) ┅枚举值比较规则是:按其在定义时的顺序号比较。如果定义时没有指定,则第一个枚举元素的值认作0。故mon>sun. 3.一个整数直接赋给一个枚举变量是不对的。如:workday = 2,应先进行强制类型转换才能赋值。如:workday=(enum weekday) 2;§9.7 用typedef来定义数据类型 我们可以用typeof定义新的类型名代替已有的类型名。 如:typedef int INTEGER; 指定用INTEGER代表int类型。这样 int i,j;等价于 INTEGER i,j; 如果在一个程序中,一个整型变量用来计数,可以将变量定义为 COUNT为int 型: typedef int COUNT; COUNT i,j; 定义一个新的类型的方法是: 1. 先按定义变量的方法写出定义体(如:int i;)。 2. 将变量名换成新类型名(如:将 i换成COUNT)。 3. 在最前面加 typedef(如: typedef int COUNT;)。 4. 然后可以用新类型名定义变量。 说明:
|
||