在写程序过程中,我们可能会遇到一些问题,如对学生信息进行操作,而学生包括多个属性,例如、姓名、学号、班级、专业、电话等等,对于这些信息,它门之间有联系而且数据类型不同。如果这是我们还是使用数组进行操作,那就很麻烦而且没有规律。现在介绍一个新的数据类型:结构体。
struct Student
{
char name[20];
char number[20]
int class;
char major[20];
};
上面即使一个结构体的定义,它包括了四个数据成员,两种数据类型。
定义一个结构体类型变量:struct Student s1;
给这个变量赋值即初始化:s1.name="liming",s1.number="1001",s1.class=2;s1.major="计算机科学与技术";
定义结构体变量和初始化还有几种方式,上面这一种是我最常用的。
赋值也可以是:s1={"liming","1001",2,"计算机科学与技术"};等等。
引用结构体变量:变量.成员名;
结构体类型也是一种数据类型,所有他跟int类型一样,可以定义数组可以定义指针。
struct Student stu[10];
struct Student *s;
指针变量引用数据成员:(*s).name = "liming";或者s->name="liming";可以仔细体会一下着两种方式。
->为指向运算符。
结构体变量可以做函数参数,函数返回值也可以是一个结构体变量。
struct Student max(struct Student dstu[5])
{
struct Student h;
.......................;
return h;
}
链表:
struct Student
{
int num;
float score;
struct Student *next;
};
链表定义中,其中一个数据成员就是一个结构体指针,用来指向下一个结构体变量。
struct Stuent a[3],*p,*head;
head=p=&a[0]; //先初始化头指针,head就指向了a[0]
继续向后链接;
p->next = &a[1];
p = &a[1];
p->next = &a[2];
p = &a[2];
p->next = NULL;//最后一个为空。
共用体类型:
共用体类型的定义与结构体有些类似,但是他们却是不同的。
union Student
{
int money;
int age;
char sex;
};
定义变量:union Student m,n;
共用体与结构体的区别:
结构体变量占用的内存是所有成员占用内存之和,共用体变量占用的内存是变量中占用内存最长的变量的长度。每一刻只能有一个成员占用内存,不能同时给所有成员赋值。
m={100,20,'m'}是错误的,m={100}正确。
typedef的使用:
(1)用一个新名字替换原来的名字:typedef int zhengxin
(2)结构体定义
typedef struct
{
int month;
int day;
int year;
}Date;
以前是struct Date d;现在是:Date d; //简单代替复杂。很常用。