多维数组
考虑一个日期转换问题,
将某月某日转换为转换成某年第几天。
首先,分析该年是闰年还是非闰年,然后在该年的月份上加上天数,比如闰年的3月10日,则是31+29+10=70,即该年的第70天。
将某年的第几天,转换为某年的某月某日,
同样,先分析该年是闰年还是非闰年,然后在该年的日期转换为月份日期,比如闰年第100天,则是100-31=69>0,故大于1月,69-29=40>0,故大于二月,40-31=9>0,故大于三月,9-30<0,故在四月,即为4月9日。
为了方便处理,将闰月与非闰月的天数,存储在一个二维数组之中,
static char daytab[2][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;
leap=year%4==0&&year%100!=0||year%400==0;
for(i=1;i<month;i++)
{
day+=daytab[leap][i];
}
return day;
}
void month_day(int year,int yearday,int *pmonth,int *pday)
{
int i,leap;
leap=year%4==0&&year%100!=0||year%400==0;
for(i=1;yearday>daytab[leap][i];i++)
{
yearday-=daytab[leap][i];
}
*pmonth=i;
*pday=yearday;
}
指针数组与二维数组的联系与区别;
(1)首先,从命名角度来看,定义一个二维数组
int a[10][20];与其相一致的指针数组命名为int *b[10];
(2)其次,作为参数传递时,二维数组必须指明其中的列数,因此int a[10][20]在作为参数传递时,等价于int a[][20],还等价于int (*a)[20];这与指针数组是不太相同的,假设指针数组的每个具体化的指向元素的个数也是20个,那么前面的可以写成int *a[10];
(3)二维数组分配的固定的空间,指针数组只是给指针分配了空间。