一、结构体
1.结构体的定义与使用
将不同类型数据组合成一个有机整体
struct student //student为结构体类型名
{
int num;
char name[20];
char sex;
int age; //成员列表
}stu; //结构体变量名(可不写,之后在定义)
//可stu = {……}(定义结构体同时赋值)
struct student stu; //创建结构体变量
stu.num = 1;
//stu.name = "张三" //错误,name[20]不可修改
strcpy(stu.name,"张三"); //正确
可用scanf获取值:
struct student stu;
scanf("%d%s%s%d",&stu.num,stu.name,……);
必要时可使用const防止误操作,使结构体中值不会被修改
2.结构体数组
struct student stu[3]=
{
{……}, {……}, {……}
};
PS:结构体成员需偏移对齐!
如:最大为int,则结构体大小为4的倍数
结构体是一种数据类型,可开辟堆空间存储
3.结构体嵌套
struct a
{
……
};
struct b
{
……
struct a a1;
};
4.结构体赋值
struct student stu = {1,"张三",……};
struct student b = a;
strcpy改变b中的值,不影响a
5.结构体指针
struct student stu = {……};
struct student *p = & stu;
printf("%s\n",p->name); //p->name同于(*p).name
结构体指针->成员
结构体变量.成员
二、共用体(联合体)
union [union tag]
{
member definition;
member definition;
...
member definition;
} [one or more union variables];
union tag 是可选的,每个 member definition 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。在共用体定义的末尾,最后一个分号之前,可以指定一个或多个共用体变量,是可选的。
- union是一个能在同一存储空间存储不同类型数据的类型
- 联合体所占内存的长度等于其最长成员的长度倍数
- 同一内存段可放不同类型成员,但每一瞬时只有一种起作用
- 起作用的成员是最后一次存放的成员,存入一个新成员后原有成员值会被覆盖
- 共用体变量地址与其各成员地址相同
三、枚举
enum DAY //(DAY可省略)
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
- 将变量的值一一列举出来,变量值只限于列举出来的值范围内
- 枚举值表中应列出所有可用值(也称枚举元素)
- 枚举值为常量,不可再赋值
- 枚举元素由系统定义值,从0开始(0,1,2……)表示序号,也可自行修改元素值,之后值自动递增