一、构造数据类型
构造数据类型:用户自己建立的数据类型(自定义数据类型)
C语言中的自定义数据类型有:数组类型、结构体类型、共用体类型和枚举类型。
1.1. 结构体
C语言允许用户根据需要自己建立的由不同类型数据组成的组合型的数据类型,我们把它称之为结构体(struct)。结构体能根据用户需要来更方便的存储各种各样的信息。
用法: struct 结构体名{ 结构成员;}
定义一个Student结构体
struct Student{
int ID;
char name[10];
float score;
}
给结构体赋值,按照顺序赋值给结构体成员,是一一对应的。不能用a.ID=1;这种方式赋值,但是在strcpy函数中可以用实例.成员的方式赋值,比如strcpy(a.name,”张三”);
Student a={1,”张三”,60.1};
访问结构体里的成员:用实例.成员名引用
a.ID
1.2 给类型取别名
(必须是类型,可以给构造数据类型也可以给基本数据类型取别名)
如:typedef int 整型; //相当于宏,本质是替换 。把int类型替换为“整型”类型
typedef struct Hero {}hero; //给构造数据类型 Hero取别名叫hero;
//定义结构体的时候如果没写结构名,那么用typedef给这个结构体取别名
typedef struct{ int a;int b;}STT; //别名叫STT
//定义结构体的时候没写结构名,也没有用typedef,但是要在}后写标识符,那么标识符就是我们定义的该结构的变量。
struct {int a; int b;}s1,s2,s3[10];
1.3 结构体的内存计算方法
结构体:内存对齐标准:以该结构体中最大的基本数据类型所占的内存进行对齐。比如
struct One{int a;int b;char c}; //应该是9个字节,但是因为最大的数据类型为4个字节,所以实际为12字节。
struct Two{int a;char b[10];float c}; //分配的是20个字节(4+(4+4+4)+4)
struct Three{double a;int b;char c[10]}; //分配的是24个字节(b的后面4个字节会给c的前4个字节用,只需要分配3个8字节)
struct Four{int a;char b[10];char c;double d};//分配的是24个字节(最长的是8,a分配8个,b前4个放在a后面,再给b一个8放6个,剩2个,c放在b剩的后面,d再分配8个存。)
struct Five{char a;int b;char c[10];double d;}; //分配的是24个字节
2. 共同体
2.1 什么是共用体?
共用体关键字:union
有时候想用同一段内存单元存放不同类型的变量。如:把一个整型变量、浮点型变量和字符型变量放在同一个内存单元中,它们在内存中所占字节数不同,但是共用同一段内存地址,也就是共用体了。也就是所有数据成员共用同一段内存的数据类型称为共用体,也称其为联合体。
共用体和结构体的声明、定义和成员变量引用的语法是类似的,只不过关键字不一样,以及所占内存大小有区别而已。