
上篇聊了内存泄漏,有人后台说想看引用和指针的区别。来了。这个话题在面试里出现的频率极高,几乎每场C++面试都会问到。但很多人答得不够好——不是不知道,而是讲不清楚。讲个面试场景。面试官问:"引用和指针有什么区别?"大部分人的回答是:"引用是别名,指针存地址。引用不能为空,指针可以。引用必须初始化,指针不用。"这个答案对不对?对。但够不够?不够。我见过一个候选人,把这五点背得滚瓜烂熟,面试官追问了一句"那底层呢?"他直接卡壳了。背定义谁都会,理解底层才是区分度。面试官想听的不是这些表面的区别,而是底层实现上的区别。如果你能说:"引用在底层是用指针实现的,但编译器帮你做了语法封装,让你用起来更安全、更方便。"面试官会觉得你有深度。今天就把引用这个东西掰开了讲清楚。引用到底是什么?引用是C++特有的语法。你给一个变量起了个别名,通过这个别名操作的就是原变量。int a = 10; int ref = a; // ref是a的引用 ref = 20; // a现在是20 cout a endl; // 输出20ref就是a的别名。你修改ref,就是在修改a。它们指向同一块内存。你可以用ref和a验证一下,地址完全一样。这就说明ref和a确实是同一块内存的两个名字。这和指针很像:int a = 10; int* p =