13.3.3 结构中的结构

Objective-C语言在定义结构方面提供了极大的灵活性。比如,可以定义一个结构,它本身包含其他结构作为自己的一个或多个成员,或者可以定义包含数组的结构。

你已经知道如何将月、日和年逻辑地组合在名为date的结构中。假设有一个名为time的类似结构,用来组合小时、分钟和秒以表示时间。在一些应用程序中,也许需要在逻辑上将日期和时间组合在一起。比如,可能要设置一组在特定日期和时间发生的事件列表。

前面的讨论暗示你想要找到一种简便的方式将日期和时间结合在一起。在Objective-C语言中,通过定义新结构(可能命名为date_and_time)可以实现该任务。这个结构包含两个元素:日期和时间。下面给出定义:


struct date_and_time

{

struct date sdate;

struct time stime;

};


该结构的第一个成员是struct date类型的,名为sdate,第二个成员是struct time类型的,名为stime。date_and_time结构的定义要求先向编译器定义date结构和time结构。

现在,可以将变量定义为date_and_time结构了,如下所示:


struct date_and_time event;


要引用变量event中的date结构,语法是一样的:


event.sdate


这样,就可以使用一条语句,将该日期作为参数调用函数dateUpdate,然后将结果赋值。如下所示:


event.sdate=dateUpdate(event.sdate);


可以对date_and_time结构中的time结构进行同样的操作:


event.stime=timeupdate(event.stime);


要引用这些结构中的一个成员,需要在成员名称之后添加句点:


event.sdate.month=10;


这个表达式将event包含的date结构中的month成员设置为10月,下面的语句


++event.stime.seconds;


将time结构中的seconds成员加1。

变量event可以用如下方式初始化:


struct date_and_time event=

{{12,17,1989},{3,30,0}};


该语句将变量event中的date成员设置为1989年12月17日,并且将time成员设置为3点30分0秒。很自然,可以设置一个date_and_time结构数组,如下声明所示:


struct date_and_time events[100];


数组events包含有100个struct date_and_time类型的元素。数组中第4个date_and_time元素可以用通常的方式引用为events[3],数组中第25个元素可以使用如下语句发送给函数dateUpdate:


events[24].sdate=dateUpdate(events[24].sdate);


要将该数组中的第一个时间设置为中午,可以使用以下的语句序列:


events[0].stime.hour=12;

events[0].stime.minutes=0;

events[0].stime.seconds=0;