C/C++面试高频题解析与解题思路(附答案)

一、基础语法与核心概念
  1. 指针与引用的区别?

    • 问题:指针和引用在初始化、空值、操作方式上的差异是什么?

    • 解析

      • 引用必须初始化且不能指向空值,而指针可初始化为空(nullptr)。

      • 引用是变量的别名,操作时无需解引用(*),指针需解引用。

      • 引用初始化后不可修改绑定对象,指针可重新指向其他对象。

    • 答案示例

      int a = 10;
      int &ref = a;  // 引用必须初始化
      int *ptr = &a; // 指针可后续修改指向

  2. static关键字的作用 

    • 问题static在不同场景下的用途是什么?

    • 解析

      • 局部变量:延长生命周期至程序结束,作用域仍为函数内。

      • 全局变量/函数:限制作用域至当前文件。

      • 类成员:静态成员属于类而非对象,需类外初始化。

    • 应用场景:计数器、共享资源管理。

  3. const#define的区别 

    • 问题:为什么推荐使用const而非宏定义?

    • 解析

      • 类型安全const有类型检查,#define仅为文本替换。

      • 调试const可调试,#define在预处理阶段已替换。

      • 内存const分配内存,#define不分配。


二、面向对象与多态
  1. 虚函数的实现原理 

    • 问题:虚函数如何实现多态?虚函数表(vtable)的作用是什么?

    • 解析

      • 每个含虚函数的类生成一个虚函数表,存储虚函数地址。

      • 对象内部包含虚表指针(vptr),指向虚函数表。

      • 动态绑定:通过vptr在运行时确定调用的函数。

    • 代码示例

      class Base {
      public:
          virtual void func() { cout << "Base"; }
      };
      class Derived : public Base {
          void func() override { cout << "Derived"; }
      };

  2. 构造函数能否为虚函数? 

    • 问题:为何构造函数不能是虚函数?

    • 解析

      • 虚函数依赖虚表,而虚表在对象构造完成后才初始化。

      • 构造函数用于创建对象,此时虚表尚未建立。

  3. 析构函数为何需要声明为虚函数? 

    • 问题:基类析构函数不声明为虚函数会导致什么问题?

    • 解析

      • 若基类指针指向派生类对象,非虚析构会导致派生类资源未释放。

      • 示例

        Base *ptr = new Derived();
        delete ptr; // 若析构非虚,仅调用Base的析构函数


三、内存管理与智能指针
  1. mallocnew的区别 

    • 问题:动态内存分配时为何优先使用new

    • 解析

      • new调用构造函数,malloc仅分配内存。

      • delete调用析构函数,free直接释放内存。

    • 代码对比

      int *p1 = (int*)malloc(sizeof(int)); // 未初始化
      int *p2 = new int(10);              // 初始化为10

  2. 智能指针的实现原理 

    • 问题shared_ptr如何通过引用计数管理资源?

    • 解析

      • shared_ptr内部维护控制块,记录引用计数

      • 循环引用问题:需用weak_ptr打破(不增加计数)

    • 示例

      std::shared_ptr<int> sp1 = std::make_shared<int>(42);
      std::weak_ptr<int> wp = sp1;


四、STL与容器
  1. vectordeque的区别 

    • 问题:为何deque适合频繁头部操作?

    • 解析

      • 内存结构vector为连续内存,deque为分块链表。

      • 扩容效率deque无需整体复制,扩容更快。

    • 应用场景vector适合随机访问,deque适合双端插入。

  2. push_backemplace_back的差异 

    • 问题:为何emplace_back更高效?

    • 解析

      • push_back需构造临时对象再拷贝,emplace_back直接构造。

    • 代码示例

      std::vector<std::string> vec;
      vec.push_back("hello");       // 构造临时string对象
      vec.emplace_back("hello");    // 直接构造,无拷贝


五、实战技巧与高频考点
  1. 如何避免野指针? 

    • 答案

      • 初始化指针为nullptr

      • 释放后立即置空:delete ptr; ptr = nullptr;

  2. 内存对齐的作用 4

    • 问题:为何结构体需要内存对齐?

    • 解析

      • 性能优化:CPU按对齐单位读取数据,减少访问次数。

      • 硬件限制:某些架构要求特定类型必须对齐。

  • 【指针】:趣味指针教程 点击获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/968443.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP系统常见的接口方式及特点介绍

【SAP系统研究】 在SAP系统中,接口主要用于系统间或系统与外部应用的数据交换和集成。以下是常见的接口方式及其特点: 一、IDoc方式 IDoc,Intermediate document,是SAP历史很悠久的接口技术,是一种系统间通用的数据交换媒介文件。IDoc基于XML的标准格式,常用于EDI、系…

【嵌入式Linux应用开发基础】open函数与close函数

目录 一、open函数 1.1. 函数原型 1.2 参数说明 1.3 返回值 1.4. 示例代码 二、close函数 2.1. 函数原型 2.2. 示例代码 三、关键注意事项 3.1. 资源管理与泄漏防范 3.2. 错误处理的严谨性 3.3. 标志&#xff08;flags&#xff09;与权限&#xff08;mode&#xff…

LabVIEW国内外开发的区别

LabVIEW作为全球领先的图形化编程平台&#xff0c;在国内外工业测控领域均占据重要地位。本文从开发理念、技术生态、应用深度及自主可控性四个维度&#xff0c;对比分析国内外LabVIEW开发的差异&#xff0c;并结合国内实际应用场景&#xff0c;探讨其未来发展趋势。 ​ 一、开…

【大模型】阿里云百炼平台对接DeepSeek-R1大模型使用详解

目录 一、前言 二、DeepSeek简介 2.1 DeepSeek 是什么 2.2 DeepSeek R1特点 2.2.1 DeepSeek-R1创新点 2.3 DeepSeek R1应用场景 2.4 与其他大模型对比 三、阿里云百炼大平台介绍 3.1 阿里云百炼大平台是什么 3.2 阿里云百炼平台主要功能 3.2.1 应用场景 3.3 为什么选…

【DuodooBMS】给PDF附件加“受控”水印的完整Python实现

给PDF附件加“受控”水印的完整Python实现 功能需求 在实际工作中&#xff0c;许多文件需要添加水印以标识其状态&#xff0c;例如“受控”“机密”等。对于PDF文件&#xff0c;添加水印不仅可以增强文件的可识别性&#xff0c;还可以防止未经授权的使用。本代码的功能需求是…

linux的三剑客和进程处理

Linux三剑客&#xff1a; grep&#xff1a;查找 sed&#xff1a;编辑 awk&#xff1a;分析 grep - 正则表达式 [rootlocalhost ~]# grep ^a hello.txt abc grep - 忽略大小写&#xff0c;还有一些场景需要查询出来对应字符串所在的行号&#xff0c;方便我们快速在文件中定位字…

ASUS/华硕飞行堡垒9 FX506H FX706H 原厂Win10系统 工厂文件 带ASUS Recovery恢复

华硕工厂文件恢复系统 &#xff0c;安装结束后带隐藏分区&#xff0c;带一键恢复&#xff0c;以及机器所有的驱动和软件。 支持型号&#xff1a;FX506HC, FX506HE, FX506HM, FX706HC, FX706HE, FX706HM, FX506HHR, FX706HMB, FX706HEB, FX706HCB, FX506HMB, FX506HEB, FX506HC…

13.StringTable

String的基本特性 String&#xff1a;字符串&#xff0c;使用一对 ”” 引起来表示 String s1 "mogublog" ; // 字面量的定义方式String s2 new String("moxi"); string声明为final的&#xff0c;不可被继承String实现了Serializable接口&#xff1a;表…

JavaSE基本知识补充 -Map集合

目录 Map(key&#xff0c;value键值对呈现&#xff09; 1.1 Map的映射的特点 1. 2.HashMap &#xff08;键值对的业务偏多&#xff0c;而且hashmap在jdk1.7和1.8之间有所不同&#xff0c;性能做了提升&#xff0c;面试高频考点&#xff09; 1.3 Map接口的方法 方法 HashMap遍…

JAVA学习第二天

ArryList的构造方法和添加方法 01。构造方法的<>里面可以放数据类型 02. add&#xff08;&#xff09;可以直接在后面加入数据&#xff0c;也可以指定下标的插入元素。 ArrayList的常用方法 ArrayList存储对象 在Java中&#xff0c;System.out.println()可以打印基本数据…

基于窄带物联网的矿车追踪定位系统(论文+源码+实物)

1.功能设计 鉴于智能物联网的大趋势&#xff0c;本次基于窄带物联网的矿车追踪定位系统应具备以下功能&#xff1a; &#xff08;1&#xff09;实现实时定位&#xff0c;真正实现矿车随时随地定位; &#xff08;2&#xff09;定位精度高&#xff0c;采用该系统可以实现矿车在…

如何把邮件批量导出到本地

最近遇到邮箱满了的问题&#xff0c;需要把邮件批量导出到本地&#xff0c;然后清空邮箱。 问题是这个邮箱的官网&#xff0c;没有批量导出按钮&#xff0c;比较麻烦&#xff1b;总不能一封一封下载到本地&#xff0c;上万的。 找到了一个好用的工具&#xff0c;Mozilla Thun…

ICLR 2025 oral|用nuPlan + 200h物流小车数据集测试!SOTA扩散模型轨迹规划器来了

导读&#xff1a; 本文介绍了清华大学联合毫末智行、自动化所、港中文、上海交大、上海人工智能实验室最新研究成果《Diffusion-based Planning for Autonomous Driving with Flexible Guidance》——荣获ICLR 2025 Oral Presentation(仅1.8%接受率)。 该算法创新性地设计了基…

dify.ai 怎么配置链接火山引擎等云厂商的deepseek模型

要将 dify.ai 配置链接到火山引擎等云厂商的 DeepSeek 模型. 申请火山引擎的key&#xff0c;创建endpoint 添加模型 测试模型

SAP-ABAP:dialog界面中的数据块Event Block详解举例

在SAP的Dialog程序开发中&#xff0c;Event Block&#xff08;事件块&#xff09;是屏幕流逻辑&#xff08;Flow Logic&#xff09;中的关键部分&#xff0c;用于定义屏幕在特定事件触发时执行的逻辑。Event Block通常与ABAP模块&#xff08;Module&#xff09;结合使用&#x…

2025年怎么选择SEO发布工具

在如今竞争激烈的互联网时代&#xff0c;网站的流量和曝光率直接决定着一个品牌或企业的市场影响力。无论是个人博客&#xff0c;还是企业官网&#xff0c;能够有效提升SEO&#xff08;搜索引擎优化&#xff09;排名的工具&#xff0c;已成为许多网站管理者和营销人员的必备良器…

Java 进阶day14XML Dom4j 工厂模式 Base64

目录 知识点1、XML 概念XML约束 知识点2、XML解析 Dom4j&#xff08;Dom for java&#xff09;XPath 知识点3、工厂模式知识点4、Base64 知识点1、XML 概念 XML的全称为&#xff08;eXtensible Markup Language&#xff09;&#xff0c;是一种可扩展的标记语言。 XML的作用…

数据结构实验——排序算法的实现与分析

前言 到目前为止&#xff0c;8个数据结构实验在这里就全部更完啦&#xff08;撒花&#xff09;&#xff01;我那一段难忘的周二晚课时光也告一段落&#xff0c;整体来说&#xff0c;有赶课的折腾&#xff0c;有调错的崩溃&#xff0c;也有故意迟到五分钟的惬意&#xff0c;用G…

【Antv G2 5.x】饼图添加点击事件,获取当前坐标数据

// 监听 tooltip:show 事件this.chart.on(tooltip:show, (event) => {this.currentShowTooltipName = event.data.items[0].name})// 监听绘图区plot的点击事件this.chart.on(interval:click, ev => {this.$emit(chartClick, this.currentShowTooltipName);})// 监听绘图…

Oracle常用导元数据方法

1 说明 前两天领导发邮件要求导出O库一批表和索引的ddl语句做国产化测试&#xff0c;涉及6个系统&#xff0c;6千多张表&#xff0c;还好涉及的用户并不多&#xff0c;要不然很麻烦。 如此大费周折原因&#xff0c;是某国产库无法做元数据迁移。。。额&#xff0c;只能我手动导…