第9章 结构体、共用体、枚举
9.1 结构体
1.对于同类型结构体变量之间可以整体一次赋值
9.2 指向结构体的指针
9.2.1结构体变量的指针
1.定义格式:struct 结构体名 *结构体指针变量名
2.赋值格式:结构体指针变量名=&结构体变量
3.结构体成员引用:
(1)(*结构体指针变量).成员名
(2)结构体指针变量->成员名
例:
#include<stdio.h>
struct stu
{
int num;
char name[20];
int score;
};
int main()
{
struct stu s={1001,"zhang",99};
struct stu *p;
p=&s;
printf("num\tname\tscore\n");
printf("%d\t%s\t%d\n",s.num,s.name,s.score);
printf("%d\t%s\t%d\n",(*p).num,(*p).name,(*p).score);
printf("%d\t%s\t%d\n",p->num,p->name,p->score);
return 0;
}
9.2.2 结构体数组的指针:与指向多维数组的指针类似
9.2.3 结构体(数组)作函数的参数、指向结构体的指针作函数参数
9.3 共用体(union)
1.共用体类型:为了节省内存空间,把不同用途的数据存放在同一存储区域
2.共用体类型变量在内存中所占空间不是所有成员空间长度和,而是长度最大成员项的存储空间
3.由于各成员共用一个存储空间,所以第一次赋得值会被第二次覆盖,覆盖后归0
4.定义:union 共用体名{成员列表};
5.初始化:union 共用体类型名 共用体变量名={初始值};
9.4 枚举类型(enum)
1.枚举类型定义:enum 枚举名{枚举值表};
2.枚举变量定义:enum 枚举类型名{枚举值表}枚举变量表列;
3.枚举数组定义:enum 枚举类型名 数组名[长度];
4.枚举变量初始化:枚举变量=枚举元素;
例:
enum weekday{sun,mon,tue,wed,thu,fri,sat};
enum weekday a,b;
或
enum weekday{sun,mon,tue,wed,thu,fri,sat}a,b;
enum weekday enday[7];
a=mon;
b=(weekday)6;
5.枚举数据的输入输出:不能对枚举数据直接输入输出,但枚举变量可作为整型变量处理。
(1)输入:scanf(“%d”,&a);
(2)输出:
1)直接输出枚举变量中存放的整型值,但不直观:
a=mon;printf(“%d”,a);
2)利用多分支选择语句输出对应字符串:
Switch(a)
{
case sun:printf(“sun”);break;
case mon:printf(“mon”);break;
…
}
3)用二维字符数组存储枚举常量对应的字符串
enum flag{first,second} fg;
char *name[]={“first”,”second”};
fg=first;
printf(“%s”,name[fg]);
9.5 用typedef关键字定义类型
1.可以用typedef为已有类型名定义新的类型名,可以声明数组、字符串类型
2.typedef与#define类似,#define是在预编译s时处理的,只能做简单替换,typedef是编译时处理的
3.typedef有利于程序通用与移植