目录

前言

一、结构体的声明与定义

1、结构体的声明

2、结构体的定义

(1)先声明结构体类型,再定义该类型的变量

(2)声明类型的同时定义变量

(3)不指定类型名而直接定义结构体类型变量

(4)使用结构体作为成员

二、结构体变量的初始化与引用

三、结构体数组

1、结构体数组的定义与初始化

2、结构体数组的应用举例


前言

在我们日常生活中有很多东西都不能简单的用一个整型或者一个字符串来表示,比如学生的学号、姓名、年龄等基本信息,再比如一本书有书名、作者、出版社等属性,描述这些复杂的东西,我们可以用结构体来解决。结构体就是可以将多种数据类型组合起来的结构。

一、结构体的声明与定义

1、结构体的声明

结构体可以在函数内声明也可以在函数外声明,在函数内部声明只能在该函数内使用,所以我们通常在函数外声明,这样就可以被多个函数使用。

声明结构体类型的形式如下:

struct 结构体名称{
成员1的类型 成员1的名称;
成员2的类型 成员2的名称;
……
成员n的类型 成员n的名称;
};

注意:花括号后面的分号不能少

例如,学生的姓名、性别、年龄如下:

struct student{char name[10];char sex[5];int age;}; //声明结构体类型struct student

2、结构体的定义

(1)先声明结构体类型,再定义该类型的变量

这种方式是声明类型和定义变量分离,在声明类型后可以随时定义变量,比较灵活。

struct time{ //先声明结构体类型struct timeint hour;int minute;int second;};struct time today;//再定义结构体变量today

(2)声明类型的同时定义变量

struct student{char name[10];int age;int grade;}Tom,Amy; //定义了两个结构体变量Tom,Amy

(3)不指定类型名而直接定义结构体类型变量

指定了一个无名的结构体类型,它没有名字,不能再以此结构体类型去定义其他变量,这种方式用的不多。

struct {//没有结构体的名称char name[10];int age;int grade;}Tom,Amy;

(4)使用结构体作为成员

struct date{int year;int month;int day;};struct person{char name[10];struct date brithday;//将出生日期这个结构体作为person的成员};

二、结构体变量的初始化与引用

在定义结构体变量时,可以对它初始化,即赋初值,然后就可以引用这个变量。

引用结构体变量中成员的值,引用方式为:结构体变量名. 成员名。其中“.”是成员运算符,它在所有的运算符中优先级最高。

#includestruct student{int number;char name[10];int age;};int main(){struct student a={01,"Amy",18}; //在变量a定义的同时对它初始化printf("number:%d,name:%s,age:%d",a.number,a.name,a.age);return 0;}

三、结构体数组

结构体数组每个数组元素都是一个结构体类型,他们都分别包括各个成员项。

1、结构体数组的定义与初始化

定义结构体数组的一般形式有两种,如下:

1、声明结构体类型的同时定义结构体数组

struct 结构体名称{

成员表列

}数组名[数组长度];

2、先声明结构体类型,然后定义结构体数组

struct 结构体名称{

成员表列

};

struct 结构体名称 数组名[数组长度];

例如:

struct student{char name[20];int age;}; //声明一个结构体类型struct student struct students stu[3]={"Allen",18,"Smith",19,"Grace",18};//定义一个结构体数组stu[3],并初始化

2、结构体数组的应用举例

例如,有五个学生,创建一个结构体包括学号、姓名、性别、年龄,打印年龄大于18的学生信息,如下:

#includestruct student{int number;char name[10];char sex[5];int age;};int main(){struct student stu[5]={{01,"Tom","boy",17},{02,"Jack","boy",19},{03,"Amy","girl",16},{04,"Marry","girl",20},{05,"Lose","girl",19}};int i;printf("年龄大于18的学生信息如下:\n");for(i=0;i18)printf("number:%d\n name:%s\n sex:%s\n age:%d\n",stu[i].number,stu[i].name,stu[i].sex,stu[i].age);}return 0;}

说到这里,结构体就基本差不多了,还有一个结构体指针下次再讲。