这个是要求补充的程序,我是真的看不太懂,希望有能力的朋友看一下
把以下代码放在你的程序最后即可
int DaysOfYear(int year, int month, int day)
{
int i, leap;
int days = 0;
int daysInMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
leap = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; // 判断该年是否为闰年
for (i = 1; i < month; i++) { // 计算月份之前的天数
days += daysInMonth[i];
}
days += day; // 加上当月的天数
if (leap && month > 2) { // 如果是闰年并且月份大于二月,则总天数加 1
days += 1;
}
return days;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:上面我们指出函数名是一个指针变量,这个指针变量指向函数体,那么为什么会出现这样的输出结果呢?
希望有大佬在评论区发表自己的意见,这个问题我不理解,求助!!!!
#include <stdio.h>
int max(int a, int b)
{
return a > b ? a : b;
}
int main(void)
{
int a, b;
scanf("%d %d", &a, &b);
int (*pmax)(int a, int b) = max;
printf("%p\n", max);
printf("%p\n", &max);
printf("%p\n", pmax);
printf("%p\n", &pmax);
return 0;
}
为什么 max 和 &max的结果一样呢?难道 max 不应该是一个指针变量嘛?
经过我一晚上的胡思乱想,我有了一个不太成熟的想法,来解释这个问题:
当创建一个数组的时候,会为其分配一段连续的存储空间,同时利用一个数组名来指向该数组的首地址,我们把这个数组名称为数组变量。
需要注意的的是,内存并不会为数组变量分配存储空间,这也是为什么数组名不能指向其他地方,而指针变量可以指向其他地方,因为内存为指针变量分配了存储空间。那么我们是不是可以认为,函数名是一种特殊的指针变量,内存同样不会对其分配存储空间,这也是为什么函数名不能指向其他地方。
我们发现这两者存在极大的相似之处,所以我提出了这样一个想法,函数变量(函数名)与数组变量(数组名)相似,在进行编译的时候,系统会把函数名和数组名出现的地方直接替换成函数或者数组的首地址!!!那么这里是不是又是一个特殊的发现?进行替换?是否与宏定义相关?
所以函数变量和数组变量是不是一种特殊的宏定义?????
希望有大神指正!!!