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


#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

(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;
}

#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