首页 理论教育 结构体类型的定义和引用

结构体类型的定义和引用

时间:2023-11-20 理论教育 版权反馈
【摘要】:具有这一结构体类型的变量中只能存放一组数据。所以访问结构体变量中各内嵌结构体成员时,必须按照从外层到内层的顺序逐层使用成员名定位,每层之间用点号隔开。结构体变量的各个成员可进行何种运算,由该成员的数据类型决定。

结构体类型的定义和引用

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。所以访问结构体变量中各内嵌结构体成员时,必须按照从外层到内层的顺序逐层使用成员名定位,每层之间用点号隔开。

结构体变量的各个成员可进行何种运算,由该成员的数据类型决定。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈