① 如果将某个变量的地址作为函数的实参,相应的形参就是指针;
② 若要通过函数调用来改变主调函数中某个变量的值,将该变量的地址或者指向该变量的指针作为实参即可。
/*
输入年份和天数,输出对应的年、月、日;
要求定义和调用函数month_day ( year, yearday, *pmonth, *pday);
其中 year 是年,yearday是天数,*pmonth和*pday是计算得出的月和日;
通过参数pmonth和pday返回计算得出的月和日。
例如,输入2000和61,分别返回3和1,即2000年的第61天是3月1日
*/
#include<stdio.h>
void month_day(int year, int yeardy, int* pmonth, int* pday); // 声明定义
int main()
{
int day = 0, month = 0, year, yearday; // 初始化定义
scanf_s("%d%d", &year, &yearday); // 输入年,日
month_day(year, yearday, &month, &day); // 调用函数,将变量month,day的地址作为实参
printf("%d-%d-%d\n", year, month, day); // 输出年月日
return 0;
}
void month_day(int year, int yearday, int* pmonth, int* pday) // 引用调用,形参指针pmonth和pday分别接收地址
{
int k, leap; // 定义月份、闰年
int A[2][12] = // 定义数组存放平年、闰年的天数
{
{0,31,28,31,30,31,30,31,30,31,30,31},
{0,31,29,31,30,31,30,31,30,31,30,31}
};
if (year % 4 == 0 || year % 400 == 0) // 判断是否为闰年
leap = 1; // 闰年
else
leap = 0; // 平年
for (k = 1; yearday > A[leap][k]; k++) // 根据数组判断天数
yearday = yearday - A[leap][k];
*pmonth = k; // 改变形参变量所指向的值
*pday = yearday;
}