一、结构体的定义
结构体是一种构造型数据类型,使用户自定义的新数据类型。
在结构体中可以包含若干个不同数据类型和不同意义的数据项,使这些数据项组合起来反映某一个信息。
形式:
struct 结构体名
{
数据类型 成员名1;
数据类型 成员名2;
......
};
解释:
花括号中的内容称为“成员列表" 或“域表”。
每个成员名的命名规则与变量名的相同。
数据类型可以是基本数据类型、结构体类型、联合体类型和枚举类型等。
使用分号作为结束符,整个结构体的定义也是使用分号作为结束符。
注意:
结构体类型中的成员名可以和程序中的变量名相同,二者并不代表同一个对象,编译器可以自动对他们进行区分。
结构体类型属于C语言的一种数据类型,与整型、浮点型相当。因此,定义它时不分配空间,只有当用它定义
变量时才分配空间。
二、结构体变量的声明
(1)先定义结构体类型,再定义变量
struct 结构体名
{
数据类型 成员名;
数据类型 成员名;
. . . . . .
} ;
struct 结构体名 变量名; //“struct 结构体名”这个整体表示结构体类型,二者缺一不可
(2)在定义结构体类型的同时,定义变量
struct 结构体名
{
数据类型 成员名;
数据类型 成员名;
. . . . . .
}变量名;
(3)直接定义结构体变量
struct
{
数据类型 成员名;
数据类型 成员名;
. . . . . .
}变量名;
如果省略结构体名,则称之为无名结构体,这种情况常出现在函数中。
因为缺少结构体名,所以不能在程序的的其它地方再定义结构体变量。
(4)结构体变量的大小
一个结构体变量占用内存的实际大小,实际上是该变量中所有的成员所占内存的总和。可以通过sizeof求出:
sizeof(变量名) 或 sizeof(struct 结构体名)
三、结构体变量的使用
结构体变量是不同数据类型的若干个数据的集合体。
在程序中使用结构体变量时,不能把它作为一个整体参与数据处理,而参与各种运算和操作的是
结构体变量中的各个成员项数据。
形式:
变量名 . 成员名
注意:
不能将一个结构体变量作为一个整体加以引用,而是对结构体变量中的各个成员分别引用。
如果成员又是一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员,
只能对最低级的成员进行操作。
在C程序中,同一结构体类型的变量之间允许相互赋值,而不同结构体类型的变量之间不允许相
互赋值,即使两者包含同样的成员。
结构体变量间的比较:
当对两个结构体变量进行比较时,可以进行逐个成员的比较,也可以使用内存比较函数memcmp。
头文件:string.h
函数原型:int memcmp(const void *s1,const void *s2,size_t n);
函数功能:比较两段内存中的值是否相等。
参数:
s1----->第一段内存的起始地址
s2----->第二段内存的起始地址
n------>比较大内存的大小
返回值:
0---->两段内存的值相等
大于0---->第一段内存的值大于第二段内存的值
小于0---->第一段内存的值小于第二段内存的值
四、结构体变量的初始化
为结构体变量中的每个成员赋初值,称为结构体变量的初始化。
(1)在定义结构体变量时进行初始化
struct 结构体名 变量名 = {初始化列表};
(2)在定义结构体类型时进行结构体变量的初始化
struct 结构体名
{
数据类型 成员名;
数据类型 成员名;
. . . . . .
}变量名 = {初始化列表} ;
(3)在直接定义结构体变量时进行初始化
struct
{
数据类型 成员名;
数据类型 成员名;
. . . . . .
}变量名 = {初始化列表} ;