C程序设计语言(第二版)习题5-9-使用指针访问二维数组

我们知道,二维数组是一维数组的数组的数组,因此如果我们想要使用指针访问二维数组中的某个元素,就需要首先找到这个元素属于二维数组中的哪一个一维数组,然后再确定这个元素在这个一维数组中的哪个位置即可,即如下形式:

                                                                      *(*(二维数组指针+行偏移)+列偏移)

上面这个形式是和

                                                                              二维数组名称[行偏移][列偏移]

等价的。于是习题5-9的程序可以以如下方式进行修改:

(gcc 版本 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC))

#include <stdio.h>

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}
};

/*day_of_year函数:将某月某日的日期表示形式转换为某年中第几天的表示形式*/
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;
}

/*month_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;
}

int main(){
	printf("%d\n",day_of_year(1998,4,8));
	int m,d;
	month_day(1998,31,&m,&d);
	printf("%d,%d\n",m,d);
	return 0;
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Kirito

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值