第一题: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 指针。

文章图片
本篇完。
推荐阅读
- 小问《Essential|《Essential C++》笔记之漫游(面向对象编程思维)
- 《C++要笑着学》|C++要笑着学(面向对象(下))
- C++|C++——OOP(面向对象编程)其四,多态
- 蓝桥杯往届真题详解|题目 2599: 蓝桥杯2020年第十一届国赛真题-天干地支
- 洛谷|P1923 【深基9.例4】求第 k 小的数
- linux系统编程|详解僵尸进程与孤儿进程
- 数据结构|数据结构之并查集(含代码实现)
- 一把王者的时间拿捏岛屿问题(dfs)
- LeetCode|LeetCode 2028. 找出缺失的观测数据题解