定义结构体类型:
struct 结构体名
{
数据类型 成员名1;
数据类型 成员名2;
...
数据类型 成员名n;
};
定义结构体变量:
法1:先定义结构体类型,再定义变量名
struct 结构体名 变量名;
法2:定义结构体类型的同时定义变量
struct 结构体名
{
成员列表;
}变量名 = {初始数据表}; // 在定义结构体变量的同时,初始化结构体变量的成员
结构体变量不能整体引用,只能引用其成员。
格式:结构体变量名.成员名
【注】
1.结构体是一种构造数据类型(数目固定、类型不同的若干有序变量的集合)
2.“结构体变量”所占据的内存大小,等于所有成员所占的大小之和
struct Date
{
int num;
char name[20];
char sex;
int age;
char addr[30];
};
以上结构体共占4 + 20 + 1 + 4 + 30 == 59(byte)
联合体union
在C语言中,不同数据类型的数据可以使用共同的存储区域,这种构造类型成为联合体(共用体)
定义一个联合体类型的一般形式:
union 联合体名
{
成员列表;
};
定义联合体变量名:方法同结构体
法1:先定义联合体再定义变量
union 联合体名 变量名
法2:定义联合体的同时定义变量名
联合体案例:输出下列程序的运行结果
#include <stdio.h>
int main()
{
union data
{
int i;
char ch;
float f;
}a,b,c;
a.i = 9;
b = a; // b和a共用同一块区域
c = b; // c和b共用同一块区域 --> a、b、c三者共用同一块区域(同一个成员变量)
printf("b.i = %d, c.i = %d\n", b.i, c.i); // b.i = 9, c.i = 9
return 0;
}
enum 枚举
枚举就是将某一变量所有可能的取值一一列举出来
enum 枚举名称 变量名表
例题:
若有定义enum name{a,b,c=1,d};
则枚举常量a、d的值分别为__ 0,2____
【注】定义枚举类型时,可以在枚举数据时借助"="对枚举的元素进行初始化
初始化后,会影响其后面枚举的元素的值(按下标依次递增1)
故本题:由于在c处进行初始化,因此d处的值为2(c递增1得到d)
而c前面的值,不会受到影响(依然为0)
类型定义 typedef
可以借助typedef定义新的类型名代替已有的类型名
格式:typedef 数据类型 新的名称
【注】类型定义只是给已经存在的数据类型用一个新的名称(类型名)来代表,并没有创造一个新的数据类型