1.结构体类型的定义
一般形式如下:
说明:
(1)struct是关键字,是结构体类型的标志。“结构体标识名”和“结构成员名”都是用户定义的标识符,其中“结构体标识名”在说明中可以不出现。
(2)每个“结构成员名表”中都可以含有多个同类型的成员名,它们之间以逗号分隔。
(3)结构体类型说明中的“类型名1”~“类型名n”,可以是简单数据类型,也可以是构造类型或者某种结构体类型。
(4)花括号{}中是组成该结构体的成员。
(5)同一结构体说明中,不能有相同名字的变量,但不同的结构体说明中的成员可以同名,并且结构体成员可以和程序中的其他变量同名。
(6)结构体类型的说明只是列出了该结构的组成情况,编译程序并没有因此而分配任何存储空间。真正占用存储空间的是具有相应结构类型的变量、数组以及动态开辟的存储单元。因此,在使用结构体变量、数组或指针变量之前,必须先对这些变量、数组或指针变量进行定义。
2.结构体变量的定义
定义结构体类型的变量、数组和指针变量可以用以下四种方式。
(1)在定义结构体类型的同时定义结构体变量,一般形式如下:
例如:
此处在说明结构体类型structstudent的同时,定义了一个结构体变量std、具有3个元素的结构体数组pers和基类型为结构体类型的指针变量p。具有这一结构体类型的变量中只能存放一组数据(即一个学生的档案)。结构体变量中的各成员在内存中的存储按说明中的顺序依次排列。
(2)先声明结构体类型,再定义结构体变量,一般形式如下:
(3)直接定义结构体类型变量,这种定义不需要指出结构体名,一般形式如下:
例如:
(4)使用typedef说明一个结构体类型名,再用新类型名来定义变量。
例如:
3.结构体变量初始化
和一般的变量、数组一样,结构体变量和数组也可以在定义的同时赋初值。(www.xing528.com)
(1)结构体变量赋初值。
所赋初值顺序放在一对花括号中。例如:
对结构体变量赋初值时,不允许跳过前面的成员给后面的成员赋初值。可以只给前面的若干个成员赋初值,系统将自动为无初值对应的成员赋予0值。
(2)结构体数组赋初值。
由于数组中的每个元素都是一个结构体,所以通常将其成员的值依次放在一对花括号中,例如:
4.结构体变量的引用
引用结构体变量中的成员可用以下三种形式:
结构体变量名.成员名
指针变量名->成员名
(*指针变量名).成员名
说明:
(1)点号.称为成员运算符;箭头->称为结构指向运算符,它由减号-和大于号>两部分构成,它们之间不得有空格;在第三种形式中,一对圆括号不可少。
(2)以上运算符在C语言的运算符中优先级最高,与圆括号、下标运算符的优先级相同。
例如,有以下结构体定义:
若要引用结构体变量std中的sex成员,可写作:
(*ps).sex/*通过指针变量所指向的结构体变量引用*/
若要引用结构体数组a的第1个元素a[0]中的sex成员,可写作a[0].sex。注意:不能写成a.sex,因为a是一个数组名。
若要引用结构体变量std中的出生年份时,可写作std.birthday.year或ps->birthday.year或(*ps).birthday.year。所以访问结构体变量中各内嵌结构体成员时,必须按照从外层到内层的顺序逐层使用成员名定位,每层之间用点号隔开。
结构体变量的各个成员可进行何种运算,由该成员的数据类型决定。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。