橘子嘻 2022-04-13 23:31 采纳率: 66.7%
浏览 27
已结题

有人可以看看这段代码吗,我没懂他的错误提示,不知道该怎么该


#include <iostream>
using namespace std;
class Student
{
public:
    Student(int n,int s)
    {
        num=n;
        score=s;
    }
    void display()
    {
        cout<<"num:"<<num<<"  ";
        cout<<"score:"<<score<<endl;
    }
private:
    int num,score;
};
int main()
{
    Student s[5]={Student(1001,98),
                  Student(1002,80),
                  Student(1003,77),
                  Student(1004,85),
                  Student(1005,100)};
    Student *p;
    p=s;
    (*p).display();
    *(p+2).display();
    *(p+4).display();
    return 0;
}




报错提示:

img

  • 写回答

2条回答 默认 最新

  • bostonAlen 2022-04-14 00:38
    关注

    (p+2)的地址确实是s[2],但这里不能这么用,你得用student类型指针去指向这个地址,才能解引用,不然不知道这个地址的类型,就无法使用*(p+2).display();这个方法去访问display()。否则,就只能通过(p+2)->display();去访问

    #include <iostream>
    using namespace std;
    class Student
    {
    public:
        Student() {
            num = 0;
            score = 0;
        }
        Student(int n, int s)
        {
            num = n;
            score = s;
        }
        void display()
        {
            cout << "num:" << num << "  ";
            cout << "score:" << score << endl;
        }
    private:
        int num, score;
    };
    int main()
    {
        Student s[5] = { Student(1001,98),
                      Student(1002,80),
                      Student(1003,77),
                      Student(1004,85),
                      Student(1005,100) };
        Student *p;
        p = s;
        cout << "p:" << p << " p+2:"<<p + 2 << " p+4:" << p + 4<<endl;
        (*p).display();
    
        cout << "&s[2]:" << &s[2] << " &s[4]:" << &s[4] << endl;
    
        Student *p2 = p + 2;
        (*p2).display();
        (p+2)->display();
        Student *p4 = p + 4;
        (*p4).display();
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 修改了问题 4月13日
  • 创建了问题 4月13日