C语言 返回指针值的函数该如何理解

来源:百度知道 编辑:UC知道 时间:2024/07/02 07:16:50
#include "stdio.h"
#define YEARS 5
#define MONTHS 12
float *search(float (*p)[12],int year);
void main()
{
float rain[YEARS][MONTHS],*p;
int year,month;
for(year=0;year<YEARS;year++)
for(month=0;month<MONTHS;month++)
scanf("%f",&rain[year][month]);
printf("\nYear Jan Feb Mar Apr Mat Jun Jul Aug Sep Oct Nov Dec\n");
for(year=0;year<YEARS;year++)
{
printf("%d",2000+year);
for(month=0;month<MONTHS;month++)
printf("%3.1f ",rain[year][month]);
printf("\n");
}
printf("Enter the number of year(2000 to 2004):");
scanf("%d",&year);
p=search(rain,year);
if(p==NULL) printf("Invalid year!");
else
{
printf("\nYear Jan Feb Mar Apr Mat Jun Jul Aug Sep Oct Nov Dec\n");
printf("%4d",year);
for

仔细看看指针那一章节

1 指针定义
2 指针赋值
3 指针取值
4 指针的运算(加减)

个人见解,希望有点用:
1).区别 *(p+(year-2000))和 *(p+month)中的两个p的涵义,它们是不相关的:
第一个p是函数中的形参,同时是行指针,指向一个包含12个元素的一维数组;
第二个p是主函数中的指针变量。

2).假设前面的信息都已输入,你要查找2003年各个月份的情况。输入2003后,

调用函数search(rain,year)后, p+(year-2000)即为p+3,是数组rain第3行的首地址,*(p+3)就是数组rain第3行第0列的首地址了。

此时,返回值为&rain[3][0].在主函数中p=&rain[3][0],于是p+month=&rain[3][month],//
*(p+month)=rain[3][month].//即为2003年各月份情况。

http://973645815.qzone.qq.com/

指针.