当前位置: 首页 > news >正文

C++高频面试题总结(一)

        面试知识点总结,整理自微软、Intel、Autodesk等公司面试题,涵盖C/C++基础、内存管理、面向对象、算法数据结构等核心内容。

1. 函数返回值(微软)

int func(x) {     int countx = 0;     while(x)     {         countx ++;         x = x&(x-1);     }     return countx; }

假定 `x = 9999`,返回值为 8。  
思路:将 x 转化为二进制,统计其中 1 的个数。

2. 什么是“引用”?使用引用要注意什么?

引用是某个目标变量的“别名”,对引用的操作与对变量直接操作效果完全相同。

注意事项:

  • 声明引用时必须初始化。
  • 引用一旦绑定,不能再作为其他变量的别名。
  • 引用本身不是数据类型,不占存储单元。
  • 不能建立数组的引用。

3. 将“引用”作为函数参数的特点

(1).传递引用与传递指针效果相同,形参成为实参的别名,操作直接作用于实参。
(2).不产生实参副本,效率高,节省空间,避免拷贝构造函数调用。
(3).相比指针,引用更清晰、易用,无需解引用操作。

4. 什么时候使用“常引用”?

        需要既利用引用提高效率,又保护数据不被函数修改时,使用 `const` 引用。
const 类型标识符 &引用名 = 目标变量名;

int a; const int &ra = a; ra = 1;   // 错误 a = 1;    // 正确


        临时对象是 `const` 类型,不能传递给非 `const` 引用参数。应尽量将引用参数定义为 `const`。

5. 将“引用”作为函数返回值的格式、好处与规则

格式:`类型标识符 &函数名(形参列表) { 函数体 }`

好处:不产生返回值的副本。

规则:
1. 不能返回局部变量的引用。
2. 不能返回函数内部 `new` 分配的内存的引用(易造成内存泄漏)。
3. 可以返回类成员的引用,最好为 `const`。
4. 流操作符 `<<`、`>>` 和赋值操作符 `=` 应返回引用以支持连续操作。
5. 四则运算符 `+-*/` 不能返回引用(需返回对象)。

6. “引用”与多态的关系

        引用是除指针外另一个可实现多态的手段:基类的引用可以指向派生类实例。

class B : public A { ... }; B b; A &ref = b;

7. “引用”与指针的区别

特性指针引用
本质存储地址的变量目标变量的别名
可读性较差,需解引用较好,直接操作
初始化可不初始化(野指针危险)必须初始化
重新绑定可以指向其他对象不可改变绑定

8. 什么时候需要“引用”?

(1).流操作符 `<<`、`>>` 的返回值
(2).赋值操作符 `=` 的返回值
(3).拷贝构造函数的参数
(4).赋值操作符 `=` 的参数
(5).其他推荐使用引用的场景

9. 结构与联合的区别

  • 结构:所有成员都存在,各成员存放地址不同,赋值互不影响。
  • 联合:所有成员共用一块地址空间,同一时刻只存放一个成员,对一个成员赋值会覆盖其他成员。

10. 联合相关题目输出

题 (a)

union {     int i;     char x[2]; } a; a.x[0] = 10; a.x[1] = 1; printf("%d", a.i);

输出:`266`(内存布局 `0x010A`,低位低地址)

题 (b)

union {     int
http://www.jsqmd.com/news/733982/

相关文章:

  • MCP 2026多租户隔离能力深度评测(2026 Q1权威基准测试报告首发):98.7%租户间资源泄露拦截率如何达成?
  • 内存碎片是内存分配和释放过程中导致可用内存分散成不连续的小块,从而降低内存使用效率或引发分配失败的问题
  • PPTAgent终极指南:5分钟掌握AI智能演示文稿生成
  • 移动应用开发手册13:环境治理——本地/测试/生产分不清
  • Arduino串口通信避坑大全:从Serial.read丢数据到parseFloat的诡异行为,一次讲清
  • MPC-BE:你的Windows电脑需要一个什么样的播放器?5个场景告诉你答案
  • SUSI.AI社区贡献指南:如何参与开源AI项目开发
  • 在模型广场中根据任务需求与预算快速对比并选择合适的大模型
  • Midscene.js视觉AI自动化实战指南:10个技巧实现跨平台UI自动化
  • icestark实战案例解析:电商平台微前端架构演进之路
  • 终极指南:如何高效序列化与部署Thinc深度学习模型到生产环境
  • 一文读懂如何修改浏览器头像(附实操教程)
  • 告别暴力堆叠空洞卷积:手把手解读DWRSeg如何用‘两步走’策略,在Cityscapes上跑出319.5 FPS
  • SUSI.AI完整指南:10个技巧让AI助手更懂你
  • 终极指南:如何轻松重置JetBrains IDE试用期,告别30天限制烦恼!
  • Baby Dragon Hatchling (BDH)未来路线图:下一代类脑AI架构的5大发展方向
  • 3个技巧让你的Windows任务栏焕然一新:TranslucentTB完全指南
  • 3步解锁游戏无限可能:零门槛ASI模组加载器完全指南
  • 从裸机到FreeRTOS:手把手教你重构DHT11温湿度采集任务(附中断优先级避坑指南)
  • 7步精通GSE宏编译器:从零构建魔兽世界技能自动化的完整指南
  • 终极指南:PDFMathTranslate证书验证问题的完整解决方案
  • 别再傻傻分不清了!LTS、Beta、Dev这些版本号到底该用哪个?附选型指南
  • 如何零基础掌握WPR机器人仿真:从安装到实战的完整指南
  • brpc高可用架构终极指南:微服务中的10个最佳实践设计
  • 相控阵天线校准实战:旋转矢量法 vs. 近场扫描,到底该怎么选?(含优缺点与场景分析)
  • Ubuntu 22.04 磁盘爆满别慌!手把手教你用GParted无损扩容根目录(附解决只读挂载问题)
  • 终极防休眠解决方案:Move Mouse如何智能保持电脑持续工作
  • C++面试题总结(三)
  • TastyIgniter备份与恢复:确保餐厅数据安全的完整策略
  • 第三章:Maven高级篇 — 插件开发与多模块工程