搜索

首页  >  问答  >  正文

c++ - 一个面试题,求解答

#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()出错,求解答

高洛峰高洛峰2803 天前543

全部回复(5)我来回复

  • PHP中文网

    PHP中文网2017-04-17 11:40:32

    调用成员函数时会把this指针当做参数传入,f1()函数体内还是cout<<"f1"<<endl;,这个不会有问题。而f2()函数体内实际是cout<<this->i<<endl;,this指针是NULL,所以会出错

    回复
    0
  • 黄舟

    黄舟2017-04-17 11:40:32

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

    回复
    0
  • 迷茫

    迷茫2017-04-17 11:40:32

    是不是因为没有实例化对象所以没有调用构造函数,i里没有东西?同等答案。。。。

    回复
    0
  • 怪我咯

    怪我咯2017-04-17 11:40:32

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

    回复
    0
  • 天蓬老师

    天蓬老师2017-04-17 11:40:32

    各位都说的很好。
    我就补个图。

    回复
    0
  • 取消回复