用指针方式代替数组下标方式改写函数day_of_year和month_day。
#include <stdio.h>
static int daytab[][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31},
};
int day_of_year(int year,int month,int day){//年月日转换为该年的第几天
int i,leap;
int *p;
leap = year%4==0 && year%100!=0 || year%400==0;
p = daytab[leap]; //用p去接对应的一维数组
for(i=0;month>i;i++){
day += *(++p);
}
return day;
}
void month_day(int year,int yearday,int &pmonth,int &pday){ //&是c++中的引用,某年的第几天转换为月日
int i,leap;
int *p;
leap = year%4==0 && year%100!=0 || year%400==0;
p = daytab[leap];
while(yearday > *++p){
yearday -= *p;
}
pmonth = p - daytab[leap];//因为p是指针,故不能pmonth=p,而是利用同数组内指针的减法运算,来得到这是第几个月,再赋值给pmonth。
pday = yearday;
}