结构体
除了我们常用的系统数据类型,C语言还允许用户根据需求自定义数据类型
- 将一组有关系的变量(不同类型,例如一个学生的姓名,学号,成绩等等)联系起来,这样创建一种新的数据类型——结构体类型。
结构体类型的创建方法
关键字 struct
struct Student
{
int num;
char name[20];
};
结构体类型的类型名是Student,花括号内是结构体的成员,结构体的成员还可以属于另一个结构体类型
struct Data
{
int year;
int month;
int day;
};
struct Student
{
int num;
char name[20];
struct Data birthday;//birthday 是一个变量,这个变量的类型是结构体类型Data
//这样这个变量就有了这个类型的结构
//即birthday有了year month和day
};
以上只是建立了一种类型,只是模型而没有定义变量,没有具体数据,系统不分配空间
定义结构体类型的变量
一定要先声明结构体类型,在定义该类型的变量
struct Student liming; //定义一个变量叫liming ,类型是学生
struct Student wangliang;
struct Student
{
int num;
char name[20];
struct Data birthday;
}student1;//也可以在声明结构体类型的同时定义变量student1;
定义结构体变量时,系统会为其分配内存单元,结构体类型所占内存大小是他所有成员大小之和
;如上述data的大小为4+4+4=12,而Student类型的大小为4+20+12=36; 就像int类型的变量占4
字节大小一样,Student类型的变量如liming 就占36字节
结构体类型的变量具有该结构体类型的结构
也就是说像上述的liming,他是结构体Student类型的一个变量,那么由于Student类型具有学号,姓名和生日三个成员,Student类型的变量liming则也有同样的三个成员
-
注意:结构体类型是 类型,他就类似于int,而结构体变量,他是一个特殊类型的变量,只有变量可以进行赋值,存取或运算操作
结构体变量的成员相当于普通的变量,初始化也是相同的操作,但在结构体变量中可以对某一指定成员进行初始化,其他未被初始化的数值型成员被系统初始化为0,字符型初始化为’\0’,指针型则初始化为NULL
结构体变量是一个变量,结构体的某一个成员也是一个变量,成员的表示方法是结构体变量名 .