版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C/C++经典面试题及详细答案(企业真实版)一、C语言基础面试题1、简述static关键字的三种用法和作用答案:static是开发中高频关键字,主要有三种使用场景,作用各不相同:1)修饰局部变量普通局部变量存储在栈区,函数执行结束后会立即销毁;被static修饰后,变量会存储在静态全局区,生命周期贯穿整个程序运行过程,只会初始化一次,下次调用函数会保留上一次的值。2)修饰全局变量普通全局变量可以跨文件访问,被static修饰后,变量的作用域仅限当前源文件,其他文件无法引用,有效避免全局变量命名冲突。3)修饰函数普通函数可以被外部文件调用,static修饰的函数为静态函数,仅能在当前源文件内部调用,对外隐藏接口,隔离代码模块。2、全局变量、局部变量、静态变量的区别答案:变量类型存储位置生命周期作用域默认值局部变量栈区函数调用期间当前函数内部随机垃圾值全局变量静态全局区整个程序运行周期整个工程所有文件0静态局部变量静态全局区整个程序运行周期当前函数内部0核心总结:生命周期看存储区,作用域看定义位置,静态变量只会初始化一次。3、const关键字的作用,以及常用使用场景答案:const的核心作用是修饰只读内容,禁止修改,提升代码安全性和可读性,主要用法:1)修饰普通变量:变量变为只读,定义时必须初始化,后续无法赋值修改。2)修饰指针:-constint*p:指针指向的值不可改,指针本身地址可以改;-int*constp:指针地址不可改,指向的值可以改;-constint*constp:地址和值都不可改。3)修饰函数参数:防止函数内部修改传入的实参数据,常用于字符串、数组、结构体传参。4)修饰函数返回值:避免返回值被意外修改,规范接口使用。4、指针和数组的区别,数组名是不是指针?答案:数组名不是指针,二者本质完全不同,只是使用场景高度相似,容易混淆。1)本质区别:数组是连续的内存空间,存放具体数据;指针是存储内存地址的变量。2)大小区别:sizeof(数组名)得到数组总内存大小;sizeof(指针)固定为4字节(32位系统)/8字节(64位系统)。3)可修改性:数组名是常量地址,不能被赋值;指针是变量,可以随意修改指向的地址。4)传参区别:数组作为函数参数时,会退化为指针,此时sizeof无法获取数组真实大小。5、malloc、calloc、realloc的区别答案:三者都是堆区动态内存分配函数,核心差异在初始化方式和扩容功能:1)malloc(size_tsize):分配指定大小的堆内存,不初始化,内存中是随机垃圾值,效率最高。2)calloc(size_tnum,size_tsize):分配num个、单个大小为size的内存,自动初始化为0,适合需要清零的场景。3)realloc(void*p,size_tsize):对已分配的堆内存进行扩容或缩容,保留原数据;扩容失败会返回空指针,原内存数据不变。注意:动态分配的内存必须手动free释放,否则会造成内存泄漏。6、野指针是什么?如何避免野指针?答案:野指针:指向未知、不受管控的非法内存地址的指针,没有明确指向,操作系统不允许读写该内存,操作野指针会导致程序崩溃、段错误。野指针产生原因:1)指针未初始化,默认指向随机地址;2)指针指向的内存被释放(free),但指针未置空;3)指针操作越界,指向数组、变量的非法内存区域。避免方法:1)指针定义时直接初始化为NULL;2)free释放内存后,立即将指针置为NULL;3)使用指针前先判断是否为NULL;4)严格控制数组、指针的访问范围,避免越界。二、C++核心面向对象面试题1、面向对象的三大特性及各自含义答案:面向对象三大核心特性:封装、继承、多态,是C++区别于C语言的核心特点。1)封装:将类的属性(成员变量)和行为(成员函数)捆绑在一起,隐藏内部实现细节,只对外暴露可用接口。通过访问权限(public、private、protected)控制数据访问,提高代码安全性和复用性。2)继承:子类复用父类的已有代码和属性,无需重复编写,实现代码复用。子类可以在父类基础上扩展新功能,分为公有继承、私有继承、保护继承。3)多态:同一接口,不同对象调用产生不同行为。核心作用是降低代码耦合度,提升扩展性。多态分为静态多态(编译期:函数重载、运算符重载)和动态多态(运行期:虚函数)。2、重载和重写的区别答案:对比维度重载(overload)重写/覆盖(override)作用阶段编译期(静态多态)运行期(动态多态)作用范围同一个类内子类与父类之间函数名必须相同必须相同参数列表必须不同(个数/类型/顺序)必须完全一致返回值无要求基本要求一致核心依赖参数差异区分函数虚函数+继承3、虚函数的作用?纯虚函数和抽象类答案:虚函数作用:实现运行时多态。父类定义虚函数,子类重写该函数,通过父类指针/引用调用函数时,会根据指针实际指向的对象类型,执行对应子类的方法,而非父类方法。纯虚函数:没有具体实现,只有声明的虚函数,格式:virtual函数原型=0;抽象类:包含至少一个纯虚函数的类。特点:无法实例化对象,只能被继承,用于定义统一的接口规范,强制子类实现对应功能。4、构造函数、析构函数能否为虚函数?原因是什么?答案:1)构造函数不能是虚函数虚函数的调用依赖虚函数表和虚指针,而虚指针是在构造函数执行过程中初始化的。如果构造函数是虚函数,创建对象时还没有虚表,无法调用函数,逻辑矛盾。同时,构造函数是初始化对象的,不存在多态调用的意义。2)析构函数建议定义为虚函数当父类指针指向子类对象,程序结束释放内存时,如果析构函数非虚,只会调用父类析构函数,子类资源无法释放,造成内存泄漏。定义为虚析构后,会先调用子类析构,再调用父类析构,完整释放所有资源。5、C++四种强制类型转换的区别答案:C++摒弃了C语言粗暴的强制转换,提供四种规范转换方式,各司其职:1)static_cast:静态转换,常用常规转换。用于基本数据类型转换、父子类普通转换,编译期检查,无运行时开销,不支持不安全转换。2)dynamic_cast:动态转换,专门用于多态场景。运行时检查类型合法性,主要用于父子类指针、引用转换,转换失败会返回空指针,安全度最高。3)const_cast:唯一可以去除const、volatile只读属性的转换,仅针对指针和引用,不修改数据本身,只修改权限。4)reinterpret_cast:强制重新解释内存格式,无任何类型检查,风险最高。用于指针类型互转、整数和指针互转,底层开发常用。三、高频易错编程题+解析1、写出下面代码的输出结果(指针易错)c
#include<stdio.h>
intmain()
{
charstr[]="hello";
char*p=str;
printf("%d%d\n",sizeof(str),sizeof(p));
return0;
}答案:64(32位系统)/68(64位系统)解析:str是数组名,sizeof计算数组总大小,包含末尾'\0'结束符,5个字符+1个结束符共6字节;p是指针变量,大小由系统位数决定,和指向的内容无关。2、全局变量和静态局部变量的初始化时机答案:全局变量、静态变量(static修饰)均在程序编译阶段、main函数执行之前完成初始化,且只初始化一次。普通局部变量在函数调用时初始化,每次调用都会重新初始化。3、内存泄漏的原因和排查思路答案:内存泄漏原因:堆区动态申请的内存(malloc/new),使用完毕后没有手动释放,程序运行期间该内存一直被占用,无法被系统回收,长期运行会导致内存占用越来越高,程序卡顿、崩溃。常见场景:1)malloc/new后忘记free/delete;2)指针指向的内存地址被覆盖,原内存丢失无法释放;3)子类析构未释放资源、析构函数非虚导致资源未释放。排查思路:梳理所有动态内存申请位置,保证申请和释放成对出现;使用内存检测工具排查异常内存占用。四、面试口述综合题(面试官常问)1、简述C和C++的主要区别答案:1)编程思想:C是面向过程,注重步骤和流程;C++兼容C,支持面向对象,注重模块化、复用性。2)特性差异:C++支持类、继承、多态、封装、引用、模板、STL容器、异常处理,C语言无这些特性。3)语法规范:C++类型检查更严格,支持函数重载、虚函数、命名空间,解决了C语言命名冲突、类型松散的问题。4)内存管理:C依赖malloc/free;C++新增new/delete,支持对象的自动构造和析构。2、什么
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电机铁芯叠装工岗位工作效率考核试卷含答案
- 农产品品相管理员安全演练竞赛考核试卷含答案
- 加气混凝土钢筋工岗中评优竞赛考核试卷含答案
- 铜铝杆生产工安全生产基础知识水平考核试卷含答案
- 轧制加热工岗前安全文化考核试卷含答案
- 2026年大学数据科学与大数据技术(数据仓库设计)试题及答案
- 2026年高职(地质调查与找矿)地质填图基础试题及答案
- 2026年电力调度人员业务知识考试题库及答案
- 2025年算法工程师招聘历年真题及答案
- 《大汶口氏族》课件
- SH-T 3081-2025石油化工仪表接地设计规范深度解读:网型结构主流化与12大工程红线全流程指南
- 北京实验动物从业人员上岗考试题库及答案
- 2027年云南保山电力股份有限公司员工招聘(50人)笔试备考试题及答案详解
- 统编版历史七年级上册第15课《秦汉时期的科技与文化》课件
- 2026年材料员继续教育考试题库含答案【完整版】
- 1105 非无菌产品微生物限度检查:2020年版 VS 2025年版对比表
- 医务人员职业暴露试题(附答案)
- 安静的力量主题班会课件
- 《2025型钢采购合同》
- 高等职业学校空中乘务专业 实训教学条件建设标准
- 雨季安全案例分享会
评论
0/150
提交评论