指针变量->成员名 /* 几乎都这样用 */
指针变量[0]. 成员名 /* 几乎不用 */
( *指针变量).成员名 /* 几乎不用 */
(2) 利用结构数组元素的指针引用离它所指元素i个元素的成员:
( 指针变量+i)->成员名 /* 常用 */
指针变量[i].成员名 /* 最常用 */
( *(指针变量+i)).成员名 /* 几乎不用 */
以下代码序列实现在结构数组std的前n个元素中找最高分的那个结构,并由指针p指向该结构:
P= std; /* 等价于p=&std[0] */
for(ps=p+1; ps<std+n; ps++)
if(ps-> score> p-> score) p=ps;
【例 7.1】 以下函数 dayofYear()利用月份天数表,已知日、月、年,计算年中的第几天。
int dTbl[][12] ={{31,28,31,30,31,30,31,31,30,31,30,31},/*平年*/
{31,29,31,30,31,30,31,31,30,31,30,31}}; /* 闰年 */
int dayofYear( int d,int m,int y) /*计算年中第几天 */
{ int i, leap, day=d;
leap=(y%4==0 && y%100)||y%400==0;
for( i=0; i<m-1; i++)
day += dTbl[leap][i];
return day;
}
9.在函数间传递结构数据
在函数间传递结构数据主要有以下几种形式:
(l) 共用全局的外部结构变量。
(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%400==0;
for( i=0;i<d.month-1;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.year%100) ||d.year%400==0;
for(i=0;i<d.month-1;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%400==0;
for(i=0;i< dp -> month-1;i++)
本新闻共
6页,当前在第
3页
1 2 3 4 5 6