《C语言杂俎》|【C++】几道关于this指针的面试题


第一题:this 指针存在哪里?
答案:一般情况下是存栈中(形参)。有些编译器会放到寄存器中,如VS2013,放到 ecx 中。

第二题:下列程序编译运行结果是?A. 编译报错B. 运行崩溃C. 正常运行

class A { public: void Show() { cout << "Show()" << endl; } private: int _a; }; int main() { A* p = nullptr; p->Show(); }

答案:C. 正常运行
编译器只能检查语法错误,空指针不是语法错误,所以A选项编译报错是错的。

第三题:下列程序编译运行结果是?A. 编译报错B. 运行崩溃C. 正常运行
#include using namespace std; class A { public: void PrintA() { cout << _a << endl; } private: int _a; }; int main() { A* p = nullptr; p->PrintA(); }

【《C语言杂俎》|【C++】几道关于this指针的面试题】 答案:B. 运行崩溃

分析:
① p 虽然是空指针,但是 p 调用成员函数不会编译报错,因为这不是语法错误,编译器检查不出来,编译报错是编译器报的语法错误。
② p 虽然是空指针,但是 p 调用成员函数也不会出现空指针,因为成员函数没有存在对象里面。
③ 这里会把 p 作为实参传递给隐藏的 this 指针。
《C语言杂俎》|【C++】几道关于this指针的面试题
文章图片


本篇完。

    推荐阅读