数组只能存储类型相同的元素,如果需要在一个数据结果中存储不同的数据类型,可以使用结构体。
//形式1:只声明
struct Student {
int num; //4
char name[20]; //20
char sex; //1
int age; //4
float score; //4
char address[20]; //20
};
//形式2:声明并定义
struct Date1 {
int month;
int year;
int day;
} date1, date2;
//形式3:匿名结构体
struct {
int month;
int year;
int day;
} date3;
结构体内部的元素可以称为成员列表或域表
- 结构体中可以嵌套声明
- 声明结构体只是定义了一种数据模型,并没有定义变量,其本身不占内存
使用位域可以更好的利用内存空间。 位域声明:
struct
{
type [member_name] : width ;
};
type
:整数类型,决定了如何解释位域的值。类型可以是整型、有符号整型、无符号整型。member_name
:位域的名称。width
:位域中位的数量。宽度必须小于或等于指定类型的位宽度。
关于位域有以下特点:
- 一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。
- 由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度。
- 位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的。
联合体中的所以数据都放在同一个地址开始的内存单元中。每一瞬间,联合体只能存储其中一个成员
//联合体中的所以数据都放在同一个地址开始的内存单元中。每一瞬间,联合体只能存储其中一个成员
union Date {
int i;
char ch;
float f;
};
如果一个变量只有集中可能的值,可以定义枚举类型,c语言对枚举的元素按照常量处理,每一个枚举都是int类型,默认从0开始,
//定义枚举
enum Weekday {
sun, mon, tue, wed, thu, fri, sta
};