42.构造类型
构造数据类型:数组类型、结构体类型、共用体(联合)类型。
43.结构体:“结构”是一种构造类型,它是由若干“成员”组成的。每一个成员可以时一个基本数据类型或者又是一个构造类型。
结构体可以把功能相同的数据组织起来,存在一起,用的时候方便,而且在调用函数时,若传递参数较多,传一个结构体相对而言简单一些,很多系统自带的函数必须用结构体。
①定义:struct 结构名{成员表列};
定义结构体变量:struct 结构体名 结构体变量名;——> struct student stu1;
三种定义方法:
1)先定义结构体,然后再定义结构体变量; struct student{ }; struct student stu1,stu2;
2)定义结构体的同时,定义结构体变量; struct student{ }stu1,stu2,stu3;
3)使用匿名结构体定义结构体变量;struct { }; struct car1;
②结构体变量的访问:
stu1.name stu1.sex //用变量名加.访问
③结构体变量存储原理:结构体占用的内存空间时每个成员占用的字节数之和(考虑对齐问题)。
44.结构体数组
①定义:1)定义结构体同时定义数组:
struct stu{
成员表列
}数组名[数组长度];
2)先定义结构体,后定义数组:
struct stu{};
struct boy[5];
②初始化:1)定义结构体的时候初始化:
struct Student{
char name[20];
int age;
}boys[3]={{"heqian",19},{"dandan",1},{"heshuaize",20}};
2)定义的同时进行初始化:
struct Student girls[2] = {{"",1},{"",2}};
3)先定义后初始化,整体赋值:
struct Student ds[2];
ds[0] = (struct Student){"h",19};
ds[1] = (struct Student){"h",19};
4)先定义结构体数组,后初始化:
struct Student stu[2];
strcpy(stu[0].name,"zhangsan"); //scanf("%s",stu[0].name);
stu[0].age=19;
45.结构体指针
一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值时所指向的结构变量的首地址。
①定义:struct 结构名 *结构指针变量名
struct stu *pstu; //定义了指针只能指向stu结构体类型的结构体变量
②使用:
struct student{
char *name;
int age;
}stu1;
struct student *pstu = NULL;
pstu = &stu1;
(*pstu).name,(*pstu).age)
pstu->name,pstu->age
46.枚举类型
C语言提供了一种成为”枚举“的类型。在”枚举“类型的定义中列举所有可能的取值,被说明为该”枚举“类型的变量取值不能超过定义的返回。
应该说明的是,枚举类型时一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。
①定义:
enum 枚举类型名 {枚举值表};
在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。
②枚举类型变量
1)先定义枚举类型,再定义枚举变量:
enum iColor{blue,red,yellow};
enum iColor iPhoneColor; //iphonecolor取值是有要求的,只能取枚举元素中的一个
2)定义枚举类型的同时,定义变量:
enum iColor{blue,red,yellow} iPhoneColor;
给枚举类型变量赋值:iPhoneColor = blue;
枚举类型变量的值:枚举类型定义完成后,系统会自动给枚举的每个元素都会赋值一个整型的初值
默认初值:从第一个元素开始值为0,以后每个元素的值,是上一个元素的值+1
也可以自己赋值:enum iColor{blue = 5,red = 3};