数据结构
一个 数据结构是一组一个名称组合在一起的数据元素。这些数据元素被称为 成员,可以有不同的类型和不同的长度。:数据结构,可以在C使用下面的语法声明++ 哪里是结构类型的名称,可以是具有这种结构的类型的对象了一套有效的标识符。内牙套,存在与数据成员的列表,每一个与一类和有效的标识符作为其名称指定。 例如:struct type_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;
type_name
object_name
{}
| |
声明一个结构类型,叫做
product
,并定义有两个成员是:
weight
和
price
,每一个不同的基本类型。此声明创建一个新类型(
product
),然后将其用于声明这种类型的三个对象(变量): ,
apple
,
banana
和
melon
。注意如何一次
product
声明,它是用来就像任何其他类型。
就在结束时
struct
的定义,以及前结束分号(
;
),可选字段
object_names
可以用来直接声明结构类型的对象。例如,结构对象
apple
,
banana
以及
melon
可以在数据结构类型定义的时刻被声明:
| |
在这种情况下,在
object_names
指定的类型名称(
product
)变为可选的:
struct
要求要么一个
type_name
或至少一个名称中
object_names
,但不一定两者。
之间是什么结构类型名(明确区分是重要的
product
),并且这是什么类型的对象(
apple
,
banana
,和
melon
)。许多对象(如
apple
,
banana
和
melon
)可以从一个单一的结构类型声明(
product
)。
一旦确定的结构类型的三个对象的声明(
apple
,
banana
,和
melon
)其成员可以直接访问。对于语法很简单插入一个点(
.
对象名称和成员名称之间)。例如,我们可以使用任何这些元素的操作,如果他们各自的类型的标准变量:
| |
这些每一个具有相应于它们指的是部件的数据类型:
apple.weight
,
banana.weight
,和
melon.weight
的类型的
int
,同时
apple.price
,
banana.price
和
melon.price
是类型
double
。
这里是在动作结构类型的一个真实的例子:
| | 输入标题:异形 输入年份:1979年 我喜爱的电影是: 2001太空漫游(1968) 而你的是: 外星人(1979) |
|
该示例示出了对象的成员如何行动就像常规的变量。例如,该部件
yours.year
的类型是有效的变量
int
,并且
mine.title
是类型的有效变量
string
。
但对象
mine
和
yours
也与(的类型的类型的变量
movies_t
)。例如,两者均已传递给函数
printmovie
,就好像他们是简单的变量。因此,数据结构的特征之一是指两成员单独或整个结构作为一个整体的能力。在这两种情况下使用相同的标识符:该结构的名称。
因为结构类型,它们也可以用作阵列来构造它们的表或数据库的类型:
| | 输入标题:刀锋战士 输入年份:1982 输入标题:黑客帝国 输入年份:1999 输入标题:出租车司机 输入年份:1976 你输入这些电影: 银翼杀手(1982) 黑客帝国(1999年) 出租车司机(1976) |
|
指针结构
像任何其他类型的,结构可以通过其自己的类型的指针被指向: | |
这里
amovie
是结构类型的对象
movies_t
,并且
pmovie
是一个指针指向结构类型的对象
movies_t
。因此,下面的代码也将是有效的:
| |
指针的值
pmovie
将被分配对象的地址
amovie
。
现在,让我们看到,混合指针和结构的一个例子,将成为引入新的运营商:箭头操作符(
->
):
| | 输入标题:身体抢夺入侵 输入年份:1978 您已进入: 身体掠夺者入侵(1978) |
|
箭头符(
->
)]是与指针专门用于具有成员对象引用操作。这个操作符的作用是直接从地址访问对象的成员。例如,在上面的例子:
| |
是,对于所有目的,相当于:
| |
两个表达式,
pmovie->title
并且
(*pmovie).title
是有效的,而这两个访问构件
title
由称为指针指向的数据结构
pmovie
。这肯定比一些不同的东西:
| |
这是相当等同于:
| |
这将访问由称为假想指针成员指出的值
title
的结构的对象
pmovie
(它是不是这种情况,因为
title
不是指针类型)。以下面板总结了运营商的指针和结构成员的可能的组合:
表达 | 什么是评估 | 当量 |
---|---|---|
a.b | 会员b 对象a | |
a->b | 会员b 对象的指向a | (*a).b |
*a.b | 值指向成员b 对象a | *(a.b) |
嵌套结构
结构也可以嵌套在这样的方式的结构的元件是本身另一种结构: | |
以前的声明之后,所有的下列表达式是有效的:
| |
(其中,顺便说一下,在过去两个表达式指的是相同部件)。