C语言提供的结构体类型的变量成为结构体。
结构体可以有多个数据项,每一个数据项的数据类型可以不同,这些数据项也被称为分量,成员或属性。
一.结构体类型定义
struct <结构标记>
{
成员1;
成员2;
成员n;
}; /*必须以分号结尾*/
例:
struct date
{
int year;
int month;
int day;
};
struct student
{
char num[9];
char name[20];
char sex;
int age;
float score;
char address[31];
struct date birthday; /*引用了struct date类型*/
};
注:
结构体类型在花括号后必须以分号结尾。
date,student 是自定义的结构标记,与struct一起构成结构体类型名。
定义结构体成员与定义变量格式相同,但不能赋初值。
结构体成员可以是简单变量,数组或另一个结构体变量。
定义结构体类型只是规定了构成这种数据类型的模型,在编译时并不给它分配存储空间。所以绝对不允许对定义的结构体类型进行存储数据的操作。(正如不能给int,float,char这些类型值一样)
二 .结构体变量的定义
(1).先定义结构体类型,再定义变量,即类型和变量分开。
例:
struct student
{ /*定义结构体类型*/
};
struct student stu1,stu2; /*定义结构体变量stu1和stu2*/
(2).在定义结构体类型的同时定义变量。
例:
struct student
{
}stu1,stu2;
(3).不定义结构体类型,直接定义结构体变量。
例:
struct
{
}stu1,stu2;
三.结构体变量的使用
(1).结构体变量的初始化
正如在定义数组时可以同时进行初始化一样,在定义结构体变量的同时给其赋值,即为结构体变量初始化。与其他数据一样,结构体变量也可以在编译时进行初始化。初始化的实质时对其中的各成员变量赋值,其一般格式为下:
结构体类型名 结构体变量 = {初始化表};
例:
struct student stu1 = {"04121220",
"li si",
'm',
18,
99,
"Xian",
2003,
06,
11};
注:各初始化项用逗号分隔。我们让每个成员的初始化项独占一行,只是为了提高代码的可读性。
只能在定义结构体变量时使用该初始化格式。
(2).结构体变量成员的引用
结构体变量的引用和数组一样,只能以分量的方式对结构体变量进行访问,一般格式如下:
结构体变量.成员名 /*.是结构体成员运算符*/
(3). 对结构体变量整体的引用
结构体变量整体的引用限制较大,只能对它进行一部分操作。
1.可作为函数的形参,实参或函数返回值等进行函数的数据传递。
2.当两个结构体变量的类型相同时,可以互相整体赋值。
例:stu1 = stu2;
3.C语言不允许对结构体变量进行任何逻辑操作。
例:stu1==stu2; /*这是错误的,如果需要对他们进行比较,可以逐个比较其成员*/
四.结构体数组
(1).结构体数组的定义
结构体数组的定义与结构体变量的定义类似,不再赘述。
(2). 结构体数组元素的使用
1.结构体数组元素的初始化
其一般格式如下:
结构体类型名 结构体数组名 [数组长度] = {初始值表};
例:
struct student stu[3] = { {"04121220","zhangsan",'m',90},
{"04121219","lisi",'m',92},
{"04121221","wangwu",'m',97} };
2.结构体数组元素的引用
其一般格式如下:
结构体数组名[下标].成员名 /*引用数组某一元素的某成员*/