GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | |||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | |||||||||||||||||||||||||||||||||
GeezerVison is showing notes.kamacoder.com — C++指针与引用的区别:内存模型、初始化规则、const修饰、空值安全与使用场景对比 # 指针与引用的区别面试官问"指针和引用有什么区别",大多数人能答出"指针可以为空,引用不行",但接着追问"底层实现有什么不同""const 怎么修饰""什么场景该用哪个",就开始含糊了。 这道题考的不是背定义,而是你对 C++ 内存模型的理解深度。把几个核心维度讲清楚,面试官就不会继续追了。 # 简要回答指针是存储地址的独立变量,可重新赋值、可为空、支持算术运算,但需要手动管理内存。引用是变量的别名,必须初始化、不能为空、绑定后不可更改,编译器不为其分配独立存储空间。 一句话区分:指针是"我知道他住哪",引用是"我就是他的另一个名字"。 # 详细回答
关于 const 修饰指针,记住一个口诀:const 在 引用本身没有 const 的概念——因为引用绑定后本来就不能改,天然就是"const"的。
# 知识拓展Q:底层实现上,引用真的不占内存吗? 语义上不占,但编译器实现时通常用指针来存引用的地址。区别在于编译器保证引用不会为空、不会重新绑定,这些约束在编译期就检查了,运行时引用和指针的机器码可能一样。 Q:什么时候用指针,什么时候用引用? 需要表达"可能没有"(可选参数、可能为空)→ 用指针。需要改变指向(遍历链表、动态分配)→ 用指针。其他情况一律优先用引用,语法干净、不用判空、不会野指针。现代 C++ 里,裸指针越来越少,能用引用就用引用,需要所有权语义就用智能指针。 Q:函数参数传递时,指针和引用有性能差异吗? 没有。编译器生成的代码几乎一样,都是传地址。选择依据是语义而非性能:参数一定存在用引用,参数可能为空用指针。 Q:引用能绑定到临时对象吗? 普通左值引用不行,但 ← 介绍c++一下三大特性 结构体和类的区别 → 评论验证登录状态... | |||||||||||||||||||||||||||||||||
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |