版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言高频面试题(真实面试版+详细答案)一、基础语法面试题1、简述C语言中static关键字的作用标准答案:static主要有三个核心作用,分场景使用:1)修饰局部变量:改变变量的生命周期,普通局部变量函数结束就销毁,static局部变量程序运行期间一直存在,只会初始化一次,下次调用函数保留上一次的值。2)修饰全局变量:限制作用域,普通全局变量可以跨文件访问,static全局变量只能在当前源文件使用,其他文件无法引用。3)修饰函数:将函数变为内部函数,仅当前文件可调用,外部文件无法调用,常用于封装私有工具函数。2、const关键字的用法和意义标准答案:const用来修饰只读变量,防止数据被修改,提升代码安全性,常用三种场景:1)constinta=10;//变量a只读,不能二次赋值2)constint*p;//指针指向的值不可改,指针本身地址可以改3)int*constp;//指针地址不可改,指向的值可以修改补充:函数参数用const修饰,避免函数内部误修改传入的实参数据,是工程代码常用规范。3、#define和const的区别标准答案:1)预处理阶段vs编译阶段:#define是预处理宏替换,纯文本替换,不做类型检查;const是编译阶段处理,有严格数据类型校验。2)内存占用:#define不分配内存,只是文本替换;const变量会分配内存。3)作用域:#define全局有效,可跨文件;const遵循变量作用域规则。4)调试性:const变量可调试查看值,宏定义无法调试。4、结构体struct和联合体union的区别标准答案:1)内存存储:结构体成员独立占用内存,总大小是所有成员内存之和(包含内存对齐);联合体所有成员共用同一块内存,总大小等于最大成员的大小。2)使用场景:结构体用于存储一组不同类型、同时有效的数据;联合体用于节省内存,同一时间只使用一个成员(嵌入式协议解析、寄存器配置常用)。3)赋值特性:结构体所有成员可同时赋值;联合体赋值一个成员,会覆盖其他成员的数据。二、指针核心面试题(面试重中之重)1、什么是野指针?如何避免野指针?标准答案:野指针就是指向未知、非法内存地址的指针,没有明确指向,也不是NULL。野指针不会报错编译,运行时会造成段错误、程序崩溃,是C语言最常见bug。产生原因:指针未初始化、指针指向的内存被释放后未置空、指针越界访问。避免方法:1)指针定义时直接初始化为NULL;2)使用指针前先判断if(p!=NULL);3)free释放内存后,立刻将指针置为NULL;4)杜绝指针越界操作。2、空指针NULL和野指针的区别标准答案:1)NULL指针:指向地址0,是合法空地址,有明确标识,可判断、可规避风险,安全。2)野指针:指向随机未知地址,无任何标识,无法判断,直接使用必崩程序,危险。核心总结:空指针可控,野指针不可控。3、指针数组和数组指针的区别标准答案:看变量名优先级,最简单分辨方法:括号优先于[]1)指针数组:int*p[]本质是数组,数组里的每个元素是int类型指针,常用于存储多个字符串。2)数组指针:int(*p)[]本质是指针,专门指向一个整型数组,多用于二维数组遍历。4、二级指针的使用场景标准答案:二级指针即指针的指针,常用场景:1)修改一级指针的地址:函数内部想要修改外部一级指针的指向,必须传二级指针;2)存储指针数组:char**argv命令行参数就是典型二级指针;3)动态二维内存分配。三、内存管理面试题(笔试必考)1、C语言内存分区有哪几块?各自存储什么数据?标准答案(企业通用版本):1)栈区(stack):存储局部变量、函数形参、函数返回地址。系统自动分配释放,空间小、速度快,栈溢出会程序崩溃。2)堆区(heap):存储malloc、calloc动态申请的内存。需要程序员手动free释放,不释放会造成内存泄漏。3)全局/静态区:存储全局变量、static静态变量。程序启动分配,程序结束释放。4)常量区:存储字符串常量、const只读常量。数据不可修改,修改会触发段错误。5)代码区:存储程序编译后的二进制指令,只读。2、malloc、calloc、realloc的区别标准答案:1)malloc(size):申请指定大小堆内存,不初始化,内存值是随机垃圾数。2)calloc(n,size):申请n个大小为size的内存,自动初始化为0。3)realloc(p,size):重新调整已申请堆内存的大小,可扩容、可缩容,返回新内存地址。工程规范:malloc后建议手动初始化,防止脏数据;动态内存使用完必须free。3、内存泄漏是什么?如何避免?标准答案:内存泄漏是指堆内存申请后,指针丢失或没有free释放,系统无法回收该内存,导致内存一直被占用,程序长期运行会卡顿、崩溃。避免方法:1)malloc和free成对出现;2)函数返回前,检查所有动态内存是否释放;3)指针重新赋值前,先释放原有内存;4)使用内存检测工具排查(如valgrind)。四、函数与流程面试题1、形参和实参的区别标准答案:1)实参:调用函数时传入的真实数据,有具体值,存在于主调函数;2)形参:函数定义时括号内的参数,是实参的临时拷贝,仅函数内部有效;核心:C语言函数传参是值传递,默认传递的是数据拷贝,函数内部修改形参,不会影响外部实参。想要修改实参原值,必须传指针。2、递归函数的优缺点标准答案:优点:代码简洁、逻辑清晰,适合树、链表、阶乘、斐波那契等递归结构问题。缺点:递归每层都会压栈,消耗栈内存,层数过多会栈溢出;重复计算多,效率低于循环。3、inline内联函数的作用标准答案:编译器会将内联函数的代码直接嵌入调用处,省去函数调用的压栈、跳转、返回开销,提升程序执行效率。适用场景:代码量小、频繁调用的简单函数。注意:递归函数不能做内联函数。五、高频易错笔试真题(含解析)1、局部变量能否和全局变量重名?答案:可以重名。解析:局部变量作用域优先,局部变量生效区域内,全局变量会被屏蔽,优先使用局部变量;离开局部作用域,全局变量恢复有效。工程中不建议重名,可读性极差。2、数组名是什么常量?能不能自增?答案:数组名是地址常量,不可以自增、自减、二次赋值。解析:数组名代表数组首元素地址,是固定值,常量不可修改;而数组指针可以自增移动指向位置。3、sizeof和strlen的区别标准答案:1)sizeof是运算符,计算整个变量/数组的内存大小,包含结束符'\0',编译阶段计算;2)strlen是库函数,计算字符串有效字符长度,不包含'\0',运行阶段计算,遇到'\0'停止。举例:charstr[]="abc";sizeof=4,strlen=3。4、头文件为什么要加#ifndef#define#endif标准答案:防止头文件重复包含。一个工程中多个文件同时引用同一个头文件时,不加防护会出现重复定义报错,该宏条件编译可以保证头文件只被编译一次,是工程必备规范。六、进阶面试问答(中高级岗位)1、什么是内存对齐?为什么需要内存对齐?答案:内存对齐是编译器为了提升CPU读取效率,自动将变量内存地址对齐到指定字节数(4字节/8字节对齐)。CPU读取对齐内存是一次性读取,速度快;非对齐内存需要分两次读取、拼接数据,效率极低。结构体大小不等于成员之和,就是因为内存对齐填充了空位。2、指针跳转和数组下标访问哪个效率高?答案:现代编译器优化后效率基本一致。底层原理:数组下标a[i]本质
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年山西省河津市高二生物下册期末考试模拟检测卷及参考答案【考试直接用】
- 2026隐私计算技术在数据要素市场中的商业化应用研究
- 2026中国医美行业消费趋势及市场竞争力分析报告
- 2026电子信息行业市场现状竞争态势及投资战略规划报告
- 2026中国燕麦奶市场增长潜力及品牌战略研究报告
- 2026冷冻杯装鲜果茶物流配送成本压缩的七种可行性方案
- 2026中国航空货运市场增长潜力与投资方向研究报告
- 2026盲盒营销在饮料新品推广中的转化率测试报告
- 2026中国卫星互联网星座建设进度与应用生态培育
- 2026能源互联网市场竞争格局全面分析投资趋势与深度研究报告
- 2026年甘肃省白银市公安局白银分局招聘警务辅助人员41人笔试参考题库及答案详解
- 婚前医学检查相关知识考核试题(附答案)
- 2026 年烈士纪念日英雄事迹学习专题课件
- Unit3 Smart Learning 单元测试题-人教版英语九年级上册
- 电力系统分析试题与答案
- 煤矿废水处理站建设与运营方案
- 2026年考研政治真题及答案
- 幼儿园大班活动教学设计及教案示范
- 导尿管相关尿路感染(CAUTI)防控最佳护理实践专家共识解读
- 集成电路封装技术(第二版) 课程标准、授课计划
- 高等数学上册同济大学数学系教学课件全套
评论
0/150
提交评论