指针相关报错,想让*p或者leapyear能在Output函数用

vscode上运行出现的错误,想让p或者leapyear能在Output函数用,但是报错。经过尝试,似乎是因为p没赋值导致的。
相关代码贴上了,完整代码在图片。
问题应该很基础,但是比较急。

void Date::Leapyear(int y,int leapyear,int *p)
{
    y=year;
    if((y%100)%4 == 0)
    {
        int leapyear=1;
        int *p = &leapyear;
        cout<<"此年是闰年"<<endl;
    }
    else
    {
        int leapyear=0;
        int *p = &leapyear;
        cout<<"此年不是闰年"<<endl;
    }
}
void Date::Output(int *p,int leapyear)
{
    cout<<"闰年结果"<<*p<<endl;
    cout<<year<<"."<<mouth<<"."<<day<<endl;
}

img

img

img

指针p用得不对,你是想实现用Leapyear函数判断是否是闰年,然后用Output函数打印年月日和是否是闰年,两个函数之间需要一个变量传递是否是闰年的结果。

一共有三个的问题:
1、没有理解函数的实参和形参,以及如何参数传递。C++参数传递有三种方式(1)值传递(2)指针传递(3)引用传递。当使用值传递和指针传递时,修改形参不会改变实参的值。函数内的局部变量作用域仅在函数内部。
2、判断闰年的条件不对,应该是被400整除,或者是被4整除但是不能被100整除。
3、Leapyear()不需要把y作为参数,一是因为y和p一样没有被赋值,二是可以直接用类的成员变量year。

我就按传指针修改一下你的代码:
1、修改类定义

class Date
{
private:
    int year,month,day;
public:
    Date(int y, int m, int d);
    void Input(int y, int m, int d);
    void Leapyear(int *p);//
    void Output(int *p);//
    void Calculation();
};

2、修改Date::Leapyear和Date::Output函数

void Date::Leapyear(int *p)//
{
    if( (year%100!=0 && year%4==0) || (year%400==0) )//
    {
        *p = 1;//
        cout<<"此年是闰年"<<endl;
    }
    else
    {
        *p = 0;//
        cout<<"此年不是闰年"<<endl;
    }
}
void Date::Output(int *p)//
{
    cout<<"闰年结果"<<*p<<endl;
    cout<<year<<"."<<month<<"."<<day<<endl;
}

3、修改main函数

int main()
{
    int y,m,d,leapyear;
    int *p=&leapyear;//指针p指向leapyear, leapyear用于存储是否为闰年的判断结果
    Date t1(0,0,0);
    t1.Input(y,m,d);
    t1.Leapyear(p);//
    t1.Output(p);//
    system("pause");
    return 0;
}

你这个代码思路比较混乱,传入参数也不初始化又不用,函数内部又重复定义和参数相同的变量。