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

news2025/2/13 15:35:18
一、基础语法与核心概念
  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按对齐单位读取数据,减少访问次数。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode插件Remote - SSH使用教程

Remote - SSH 是一款非常实用的 Visual Studio Code (VSCode) 扩展插件,它允许开发者通过SSH连接到远程服务器,并像在本地一样进行代码编辑和调试。这意味着你可以直接在VS Code中打开位于远程机器上的文件夹,并利用本地安装的VS Code功能,如语法高亮、智能感知、Git集成等…

【通俗易懂说模型】一篇弄懂几个经典CNN图像模型(AlexNet、VGGNet、ResNet)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;深度学习_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …

deepseek的CoT优势、两阶段训练的有效性学习笔记

文章目录 1 DeepSeek的CoT思维链的优势1.2 open-r1的CoT训练数据1.3 ReAct任务与CoT任务适用场景 2 AI推理方向&#xff1a;deepseek与deepmind的两条路线的差异2.1 PRM与ORM的两大学派分支的差异2.2 DeepSeek-R1的两阶段训练概述 1 DeepSeek的CoT思维链的优势 DeepSeek跟之前…

MobaXterm的图形化界面支持:原理与分辨率问题解决

1. 概述 MobaXterm 是一款功能强大的远程访问工具&#xff0c;支持SSH、RDP、X11、VNC等多种协议&#xff0c;并内置了强大的图形界面支持&#xff0c;让用户能够在远程操作Linux/Unix系统时&#xff0c;享受到类似本地桌面的流畅体验。 与传统的SSH客户端不同&#xff0c;Mo…

算法很美笔记(Java)——树

性质 树 上面的性质因为两个结点由一条边连成 结点数目越多&#xff0c;算法复杂度越高 二叉树 结构 层次遍历 利用队列&#xff0c;弹一个&#xff0c;加N个&#xff08;队列里弹出一个元素&#xff0c;就把这个元素的所有孩子加进去&#xff09; 具体来说&#xff1a;指…

百度 API 教程 001:显示地图并添加控件

目录 01、基本使用 前期准备 显示地图 开启鼠标滚轮缩放地图 02、添加地图控件 添加标准地图控件 添加多个控件 网址&#xff1a;地图 JS API | 百度地图API SDK 01、基本使用 前期准备 注册百度账号 申请成为开发者 获取密钥&#xff1a;控制台 | 百度地图开放平台…

OSCP - Other Machines - Loly

主要知识点 路径枚举内核漏洞提权 具体步骤 继续nmap一下先 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-01 07:12 CST Nmap scan report for loly.lc (172.16.33.25) Host is up (0.022s latency). Not shown: 65534 closed tcp ports (conn-refused) PORT …

使用瑞芯微RK3588的NPU进行模型转换和推理

使用边缘设备进行算法落地时&#xff0c;通常要考虑模型推理速度&#xff0c;NVIDA系列平台可以使用TensorRT和CUDA加速&#xff0c;瑞芯微RK3588的板子上都是Arm的手机GPU&#xff0c;虽然没有类似CUDA的加速计算方式&#xff0c;但是提供了NPU进行加速推理&#xff0c;本文说…

我用AI做数据分析之四种堆叠聚合模型的比较

我用AI做数据分析之四种堆叠聚合模型的比较 这里AI数据分析不仅仅是指AI生成代码的能力&#xff0c;我想是测试AI数据分析方面的四个能力&#xff0c;理解人类指令的能力、撰写代码的能力、执行代码的能力和解释结果的能力。如果这四个能力都达到了相当的水准&#xff0c;才可…

AcWing 5166:对称山脉 ← 动态规划

【题目来源】 https://www.luogu.com.cn/problem/P9325 https://www.acwing.com/problem/content/5169/ 【题目描述】 有 N 座山排成一排&#xff0c;从左到右依次编号为 1∼N。 其中&#xff0c;第 i 座山的高度为 hi。 对于一段连续的山脉&#xff0c;我们使用如下方法定义该…

KEPServerEX 的接口类型与连接方式的详细说明

目录 一、KEPServerEX 核心架构 二、KEPServerEX 支持的接口类型 三、KEPServerEX 支持的连接类型 1. 通用工业协议 2. 品牌专属协议 3. 行业专用协议 4. 数据库与文件接口 四、配置示例 1. 接口配置&#xff08;以OPC UA为例&#xff09; 2. 连接配置&#xff08;以…

云原生AI Agent应用安全防护方案最佳实践(上)

当下&#xff0c;AI Agent代理是一种全新的构建动态和复杂业务场景工作流的方式&#xff0c;利用大语言模型&#xff08;LLM&#xff09;作为推理引擎。这些Agent代理应用能够将复杂的自然语言查询任务分解为多个可执行步骤&#xff0c;并结合迭代反馈循环和自省机制&#xff0…

物联网软件开发与应用方向应该怎样学习,学习哪些内容,就业方向是怎样?(文末领取整套学习视频,课件)物联网硬件开发与嵌入式系统

随着物联网技术的飞速发展&#xff0c;物联网软件开发与应用方向成为了众多开发者关注的焦点。那么&#xff0c;如何在这个领域中脱颖而出呢&#xff1f;本文将为你提供一份详细的学习指南&#xff0c;帮助你从零开始&#xff0c;逐步掌握物联网软件开发与应用的核心技能。 一…

计算机网络-八股-学习摘要

一&#xff1a;HTTP的基本概念 全称&#xff1a; 超文本传输协议 从三个方面介绍HTTP协议 1&#xff0c;超文本&#xff1a;我们先来理解「文本」&#xff0c;在互联网早期的时候只是简单的字符文字&#xff0c;但现在「文本」的涵义已经可以扩展为图片、视频、压缩包等&am…

【天梯赛】L2-001紧急救援(用迪杰斯特拉找出权重和最小的最短路径)

解题反思 尝试DFS&#xff1a;开始使用DFS来遍历求解&#xff0c;但 DFS 存在大量重复计算&#xff0c;像同一节点会被多次访问并重复计算路径信息&#xff0c;导致时间复杂度高&#xff0c;部分测试点未通过 改用迪杰斯特拉&#xff1a;为了求解&#xff0c;设置了很多的辅助…

PortSwigger——WebSockets vulnerabilities

文章目录 一、WebSockets二、Lab: Manipulating WebSocket messages to exploit vulnerabilities三、Lab: Manipulating the WebSocket handshake to exploit vulnerabilities四、Using cross-site WebSockets to exploit vulnerabilities4.1 跨站WebSocket劫持&#xff08;cro…

八、OSG学习笔记-

前一章节&#xff1a; 七、OSG学习笔记-碰撞检测-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145558132?spm1001.2014.3001.5501 一、了解OSG图元加载显示流程 本章节代码&#xff1a; OsgStudy/wids CuiQingCheng/OsgStudy - 码云 - 开源中国https:…

自己动手实现一个简单的Linux AI Agent

大模型带我们来到了自然语言人机交互的时代 1、安装本地大模型进行推理 下载地址&#xff1a; https://ollama.com/download 部署本地deepseek和嵌入模型 ollama run deepseek-r1:7b2、制定Linux操作接口指令规范 3、编写大模型对话工具 #!/usr/bin/python3 #coding: utf-8…

常见的数据仓库有哪些?

数据仓库(Data Warehouse,简称数仓)是企业用于存储、管理和分析大量数据的重要工具,其核心目标是通过整合和处理数据,为决策提供高质量、一致性和可信度的数据支持。在构建和使用数仓时,选择合适的工具和技术至关重要。以下是常见的数仓工具及其特点的详细介绍: 1. Hiv…

LSTM 学习笔记 之pytorch调包每个参数的解释

0、 LSTM 原理 整理优秀的文章 LSTM入门例子&#xff1a;根据前9年的数据预测后3年的客流&#xff08;PyTorch实现&#xff09; [干货]深入浅出LSTM及其Python代码实现 整理视频 李毅宏手撕LSTM [双语字幕]吴恩达深度学习deeplearning.ai 1 Pytorch 代码 这里直接调用了nn.l…