结构体解决目的:将不同类型的数据成员组成到统一的名字之下,适合于对关系紧密、逻辑相关、具有相同或者不同属性的数据进行处理,尤其是数据库管理中得到了广泛应用。
结构体模板:
struct 结构体名
{
数据类型 成员1的名字;
数据类型 成员2的名字;
....
数据类型 成员n的名字;
}
注意:结构体模板只有声明了一种数据类型,定义了数据的组织形式,并未声明结构体类型的变量,因而编译器不为其分配内存,正如编译器不为int型分配内存。
定义结构体变量:
struct student stul;
struct student{
long studentID;
char studentName[10];
char studentSex;
int score[4];
}stul;
用typedef定义数据类型
typedef int INTEGER;
typedef struct student STUDENT;
等价于
typedef struct student{
...
}STUDENT;
STUDENT stu1,stu2;
等价于
struct student stu1, stu2;
结构体变量的初始化
STUDENT stu1={100310121,"王刚",'M',1991,{72,83,90,82}};
#include<stdio.h>
typedef struct data
{
int year;
int month;
int day;
}DATE;
typedef struct student
{
long studentID;
char studentName[10];
char studentSex;
DATE birthday;
int score[4];
}STUDENT;
int main()
{
STUDENT stu1,stu2;
int i;
printf("Input a record:\n");
scanf("%ld",&stu1.studentID);
scanf("%s",stu1.studentName);
scanf("%c",&stu1.studentSex);
scanf("%d",&stu1.birthday.year);
scanf("%d",&stu1.birthday.month);
scanf("%d",&stu1.birthday.day);
for(i=0;i<4;i++)
{
scanf("%d",&stu1.score[i]);
}
stu2=stu1;
printf("&stu2=%p\n",&stu2);
printf("%101d%8s%3c%6d%02d%02d%4d%4d%4d%4d\n",
stu2.studentID,stu2.studentName,stu2.studentSex,
stu2.birthday.year,stu2.birthday.month,stu2.birthday.day,
stu2.score[0],stu2.score[1],stu2.score[2],stu2.score[3]);
return 0;
}
结构体数组的定义和初始化
//声明
STUDENT stu[10];
//结构体数组的初始化
STUDENT stu[30]={{100310121,"王刚",'M',{1991,5,19},{72,83,90,82}},
{100310122,"李小明",'M',{1992,8,20},{88,92,78,78}},
...
}
结构体指针
STUDENT *pt=&stu1;
注意:指针一定要初始化
访问结构体指针变量所指向向的结构体成员:
pt->studentID=100310121;