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