壹贰叁221 2022-05-18 23:47 采纳率: 100%
浏览 54
已结题

指针相关报错,想让*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

  • 写回答

2条回答 默认 最新

  • SmallAntJ 2022-05-19 04:24
    关注

    指针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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月19日
  • 已采纳回答 5月19日
  • 创建了问题 5月18日