【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();
}

答案:B. 运行崩溃

分析:

① p 虽然是空指针,但是 p 调用成员函数不会编译报错,因为这不是语法错误,编译器检查不出来,编译报错是编译器报的语法错误。

② p 虽然是空指针,但是 p 调用成员函数也不会出现空指针,因为成员函数没有存在对象里面。

③ 这里会把 p 作为实参传递给隐藏的 this 指针。

【C++】几道关于this指针的面试题_第1张图片


本篇完。

你可能感兴趣的:(《C语言杂俎》,c++)