- 一、结构体的概念
- 二、 结构体类型定义
- 2.1 结构体类型的定义
- 三、结构体变量的定义初始化
- 3.1结构体变量的初始化
- 3.2 结构体变量的使用
- 四、结构体数组
- 五、结构体指针
- 六、结构体内存分配
- 七、共用体
- 八、枚举
将不同类型的数据组合成一个有机的整体,以便于引用。
结构体是一种构造数据类型(由一种或多种基本类型或构造类型的数据的集合)
(1)struct 结构体类型名{
成员列表
};
例
struct stu{
int num;
char name[20];
char sex;
};
//有了结构体类型以后,就可以用类型定义变量
struct lucy,bob,helen; //定义了三个struct stu类型的变量
每个变量里都有三个成员,分别是num,name,sex
暂时可以认为结构体变量的大小是它所有成员的和
(2)struct 结构体类型名{
成员列表
}结构体变量1,变量2;
struct stu{
int num;
char name[20];
char sex;
}lucy,bob,helen;
(3)在定义结构体类型的时候,没有结构体类型名,顺便定义结构体变量,因为没有类型名,所以以后不能再定义相关类型的数据了
struct {
成员列表
}结构体变量1,变量2;
struct{
int num;
char name[20];
char sex;
}lucy,bob,helen;
(4)typedef
typedef struct stu{
int num;
char name[20];
char sex;
}STU;
STU就相当于struct stu
STU lucy就等价于struct stu lucy
#include3.2 结构体变量的使用struct stu{ int num; char name[20]; char sex; }; int main(){ struct stu Lucy={101,"lucy",'f'}; return 0; }
(1)赋初值
#include#include struct stu{ int num; char name[20]; char sex; char *addr; }; int main(){ struct stu Lucy; Lucy.num=100; //Lucy.name="lucy"; // 错误,name是数组名即数组的首地址,不能用等号给常量赋值 strcpy(Lucy.name,"lucy"); printf("%d %sn",Lucy.num,Lucy.name); //strcpy(Lucy.addr,"beijing"); //错误,bob.addr是个野指针 bob.addr="beijing"; return 0; }
(2)结构体成员的多级引用
#include#include struct date{ int year; int month; int day; }; struct stu{ int num; char name[20]; char sex; struct date birth; }; int main(){ struct stu boy={01,"bob",'m'}; boy.birth.year=2001; boy.birth.month=1; boy.birth.day=12; return 0; }
(3)相同类型的结构体可以相互赋值
#include四、结构体数组struct stu{ int num; char name[20]; char sex; }; int main(){ struct stu Lucy={101,"lucy",'f'}; struct stu bob; bob=Lucy; return 0; }
结构体数组就是个数组,由若干个相同类型的结构体变量构成的集合
#include五、结构体指针#include struct stu{ int num; char name[20]; char sex; }edu[3];//定义了一个struct stu类型的结构体数组 int main(){ edu[0].num=100; strcpy(edu[0].name,"carrie"); printf("%d %sn",edu[0].num,edu[0].name); return 0; }
结构体指针即结构体的地址,结构体变量存放在内存中,也有起始地址
我们定义一个变量来存放这个地址,那么这个变量就是结构体指针变量
结构体指针变量也是个指针,在32位环境下,指针变量也占4个字节,存放一个地址编号
1、结构体指针变量的定义方法:
struct 结构体类型名 *结构体指针变量名
struct stu * p; //定义了一个struct stu *类型的指针变量
p是变量名,占了四个字节
例: struct stu boy;
p=&boy;
访问结构体变量的成员的方法:
boy.num=101
(*p).num=101 /
enum week{
mon,tue,wed,thu,fri,sat,sun //枚举元素默认都是常量
};
int main(){
enum week workday;
workday=mon;
printf("workday=%dn",workday);
//tue=8; //这是错误的,tue是常量,不能在程序中用赋值语句再对它赋值
//workday=abc; //枚举元素中没有abc
//workday=100; //虽然可以,但是不要这么操作,一般都用枚举元素给枚举变量赋值
return 0;
}
例:枚举类型的应用
题目:口袋中有红黄蓝白黑五种颜色的球若干个。每次从口袋中先后取出三个球,问得到三种不同颜色的球的可能取法,输出每种排列的情况。 #includeenum color{red,yellow,bule,white,black}; int main(){ enum color i,j,k,pri; int count=0,loop; for(i=red;i<=black;i++){ for(j=red;j<=black;j++){ if(i!=j){ for(k=red;k<=black;k++){ if((i!=k)&&(j!=k)){ count++; printf("%-4d",count); for(loop=1;loop<=3;loop++){ switch(loop) { case 1:pri=i;break; case 2:pri=j;break; case 3:pri=k;break; default:break; } switch(pri) { case red : printf("%-10s","red");break; case yellow:printf("%-10s","yellow");break; case bule:printf("%-10s","blue");break; case white:printf("%-10s","white");break; case black:printf("%-10s","black");break; default:break; } } printf("n"); } } } } } printf("一共有%d种可能",count); return 0; }



