第一题: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 <iostream> using namespace std; class A { public: void PrintA() { cout << _a << endl; } private: int _a; }; int main() { A* p = nullptr; p->PrintA(); }
💡 答案:B. 运行崩溃
分析:
① p 虽然是空指针,但是 p 调用成员函数不会编译报错,因为这不是语法错误,编译器检查不出来,编译报错是编译器报的语法错误。
② p 虽然是空指针,但是 p 调用成员函数也不会出现空指针,因为成员函数没有存在对象里面。
③ 这里会把 p 作为实参传递给隐藏的 this 指针。
本篇完。