(2) 函数设置结构形式参数。 (3) 函数返回结构值。 (4) 函数设置结构指针形式参数。 以函数 dayofYear()为例,设有以下形式的结构类型 struct date,以该类型的结构为形式参数,改写该函数为 struct date { int day; int month; int year; int yearDay; char * monthName; } date; int dayofYear(struct date d) { int i,leap,day=d.day; leap =(d.year%4==0 && d.year%l00) ||d.year@0==0; for( i=0;i day += dTbl[leap][i]; return day; 调用带结构形式参数的函数,必须提供与形式参数相同类型的结构变量实际参数。主函数中对函数dayofYear()的调用应改写成: date.yearDay=dayofYear(date); C语言允许函数返回结构型值,如将函数dayofYear()改为设置struct date类型的形式参数,并返回struct date类型的值。对函数dayofYear()的新的改写如下: struct date dayofYear(struct date d) { int i, leap; d.yearDay=d.day; leap=(d. year%4==0 && d.year0) ||d.year@0==0; for(i=0;i d.yearDay+=dTbl[leap][i]; return d; } 主函数调用函数dayofYear()把返回的结构值赋给结构变量 date: date=dayofYear(date) ; 再改写函数dayofYear(),使它的形式参数是以struct date结构指针为形式参数。 void dayofYear(struct date *dp) { int i,leap,day =dp-> day; leap =(dp -> year%4==0 && dp -> year%l00) ||dp ->year@0==0; for(i=0;i< dp -> month-1;i++) day+=dThl[leap][i] ; dp -> yearDay=day; } 改写后的函数通过指针形式参数引用结构成员,并将计算结果存放在结构的相应成员中,不再返回结果。对该函数的调用方式也需相应地改写成: dayofYear(&date); 7.2 共用型和共用型变量 1.共用型 在某些特殊应用中,要求某数据对象在程序执行的不同时期能存储不同类型的值。C语言的共用型能满足这个要求。共用型的成员从同一地址开始存储。但任一时刻只存储其中一个成员,由最近放入的内容决定该区域究竟是哪一个成员的值。分配给共用型的存储区域大小,要求至少能存储其中最大一种成员。定义共用型的一般形式为 union 共用型名 { 数据类型1 成员1名; 数据类型2 成员2名; …… 数据类型n 成员n名; }; 例如,下面定义的共用型(union udata) 能存储整型,或字符型,或浮点型的数据: union udata { int ival; char chval; float fval; }; 2.共用型变目的定义 与结构变量的定义方法一样,共用型变量的定义方法有以下几种: (1) 先定义共用型,然后定义共用型变量、共用型数组、共用型指针等。 (2) 定义共用型同时定义共用型变量、共用型数组、共用型指针等。 (3) 定义无名共用型同时定义共用型变量、共用型数组、共用型指针等。 3.共用型变目初始化 共用型变量定义时,也可初始化,但只能对共用型中的第一个成员初始化。 4.引用共用型变目的成员 引用共用型变量成员的方法与引用结构变量成员的方法相同。共用型也可出现在结构和数组中,共用型也可包含有结构和数组。引用结构中的共用型或共用型中的结构的书写形式与引用嵌套结构成员的书写形式一样。例如,以下代码 Struct { char name[30]; /* 标识符 */ int uflag; /* 存于共用型成员中的值的类型 */ union /* 存储变量值 */ { int ival; /* 当变量为整型时 */ char chval /* 当变量为字符型时 */ |