为什么“每月”函数返回意外结果?

时间:2019-06-13 17:13:44

标签: c arrays pointers return-value

我定义了函数everymonth。我想使用函数的返回值。但是,根据语句int*p=everymonth(i);, 我无法按预期使用数组monthdays

起初,我认为数组monthdays的范围是错误的,所以我 将其定义为全局变量。但这也是不正确的。

int * everymonth(int year)
{
    int monthdays[12]= {31,59,90,120,151,181,212,243,273,304,334,335}; 
    if(year%400==0 ||(year%4==0 && year%100!=0))
    {
        for(int i=1; i<12; i++)
        {
            monthdays[i]++;
        }
    }

    return q;
}
int main()
{
int sum=0;
int *p=everymonth(i);//i is a Constant 
for(int i=0; i<12; i++)
            {
                sum=sum+p[i];
                printf("%d\n",p[i]);
            }
}

1 个答案:

答案 0 :(得分:0)

您应该写下您打算做的事情。

您的函数everymonth返回q而不定义它。我假设您想返回monthdays,因为否则在返回之前修改它是没有意义的。

如果返回monthdays(一个局部变量),那肯定是一个问题。如果您使用monthdays,则该问题在首次调用该函数时已解决,但在第一个leap年之后将出现问题。

然后在main中,计算每个月末的天数之和。因此,对于2月,您将拥有“ 31+(31 + 28)”,依此类推。