一.结构体的定义
1.自己建立结构体类型
c语言提供了基本的数据类型,如char,short,int,float...等类型,我们称为内置类型。我们也可以使用结构体来封装一些属性,设计出新的类型,在c语言中称为结构体类型。
设计如下:
struct 结构体名称{
成员列表;(可以是基本数据类型,也可以是指针,数组其他类型)
};
下段代码展示建立一个学生类型:
struct student{
//以下为结构体类型的成员
char name[10];//定义一个学生的姓名
int id;//定义一个学生的学号
int age;//定义一个学生的年龄
char sex[10];//定义一个学生的性别
int class;//定义一个学生的班级
};
一个结构体中的成员变量也可以是结构体(该结构体一定要在原始结构体之前定义),如下代码定义一个学生的出生年月:
struct date{ //定义一个日期的结构体
int month;
int day;
int year;
};
struct student{
//以下为结构体类型的成员
char name[10];//定义一个学生的姓名
int id;//定义一个学生的学号
int age;//定义一个学生的年龄
char sex[10];//定义一个学生的性别
int class;//定义一个学生的班级
struct data birthday;//成员变量birthday属于 struct data类型
};
2.对结构体重新命名
typedef 可以对基本的数据类型进行重新命名,当然也可以对结构体类型进行重新命名;
typedef struct 结构名
{
类型 变量名;
类型 变量名;
...
} 结构别名;
例如,对结构体student进行重命名为Stu
typedef struct student{
//以下为结构体类型的成员
char name[10];//定义一个学生的姓名
int id;//定义一个学生的学号
int age;//定义一个学生的年龄
char sex[10];//定义一个学生的性别
int class;//定义一个学生的班级
}Stu;//将student重命名为Stu
3.定义结构体类型变量
a.先声明结构体类型,再定义结构体变量
如:声明一个学生类型,用Stu1和Stu2来定义
struct student Stu1,Stu2;
b.在声明类型的同时定义如对结构体重新命名所示。
c.不指定类型名而直接定义
一般形式为:
struct {
成员列表;
}Stu1,Stu2;
二.结构体的初始化
1.在定义结构体变量时,可以对它进行初始化,即赋予初始值。
2.也可以对结构体中某一成员进行初始化:
如:对学生类型中姓名进行初始化
student.name="博客";//对name赋值为博客
三.结构体成员的访问
一般格式为 结构体变量.成员名;
student.name;//对student结构体中的name成员进行访问
student.birthday.year;//对student结构体中的结构体birthday中的year进行访问
四.结构体与数组
1.结构体数组的定义
a.一般格式:
struct 结构体名 {
成员变量
}数组名[数组长度];
b.先声明一个结构体类型,再用次类型定义结构体数组:
结构体类型 数组名[数组长度];
c.对结构体初始化的形式是在定义数组的后面加上:
={初值表列};
//a.一般形式
struct student{
//成员列表
}stu[10];//定义长度为10的结构体数组
//b.先声明一个结构体,再用此类型定义结构体数组
struct student {
};//声明一个结构体
struct school
{
struct student stu[10];//stu是结构体数组名,而stu[10]这个结构体数组属于school结构体的成员变量
};
//c.定义数组的后面加上初值列表
struct student stu={“”,“”,“”};
2.结构体数组的引用
一般形式:结构体名称[].成员变量;
五.结构体与指针
所谓结构体指针是指向结构体变量的指针,一个结构体变量的起始地址就是这个结构体变量的指针。
一般定义:struct Student *p;//p可以指向 struct Student类型的变量或数组元素
struct student
{
//成员变量
char name[10];
int id;
};
struct school
{
struct student [10]
int class;
};
//指向结构体变量的指针
struct student stu1;//定义struct student 类型的变量 stu1
struct student *p;//指向struct student 类型数据的指针变量
p=&stu1;//p指向stu1
对结构体指针的使用:
(*指针名称).成员名
也可以用指向运算符(->) 指针名称->成员名