猿问

一个面试题,求解答

#include <iostream>

using namespace std;

class Myclass

{

public:

    Myclass():i(0){};

    void f1(){cout<<"f1"<<endl;}

    void f2(){cout<<i<<endl;}


private:

    int i;

};


int main()

{

    Myclass *p = NULL;


    // f1

    p->f1();

    // error

    p->f2();

    return 0;

}

如注释所说,p->f2()出错,求解答

人到中年有点甜
浏览 1073回答 3
3回答

繁星点点滴滴

没有声明对象,私有成员变量地址有个偏移会指向未知地址吧?

狐的传说

Myclass *p,p只是有Myclass的类地址访问能力,但是没有分配自己的数据堆,调用f1只是访问类的函数,但是f2执行过程中访问了i这个变量,这个变量是不存在的,因为p的数据堆就不存在,所以问会出错,同上面的this为空。
随时随地看视频慕课网APP
我要回答