版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言个人面试真题及详细答案(实操接地气版)一、基础语法篇(入门必考)1、简述static关键字的三个用法(面试必问)答案:static主要分三种使用场景,实际开发中区别很明确:1)修饰局部变量:改变变量的生命周期,不改变作用域。普通局部变量函数调用结束就释放,static局部变量会常驻内存,程序结束才释放,多次调用函数会保留上一次的值。2)修饰全局变量:改变变量的作用域。普通全局变量可以跨文件访问,static全局变量只能在当前源文件使用,其他文件无法引用,起到隔离作用。3)修饰函数:限制函数作用域。普通函数可以跨文件调用,static函数只能本文件内部调用,对外隐藏接口,避免全局函数重名冲突。2、const关键字的作用,以及const*和*const的区别答案:const核心作用:修饰只读数据,防止数据被误修改,同时能让编译器优化代码。1)const修饰普通变量:变量变成只读,不能二次赋值。2)指针区分(面试高频坑点):-constchar*p:指针指向的内容不可改,指针本身地址可以改。简单说:不能改值,能改指向。-char*constp:指针本身地址不可改,指向的内容可以改。简单说:不能改指向,能改值。-双重const(constchar*constp):地址和内容都不能改,完全只读。3、#define和const的区别?开发中怎么选?答案:1)预处理阶段不同:#define是预处理宏定义,单纯文本替换,不做类型检查;const是变量,编译阶段处理,有严格数据类型检查。2)安全性不同:宏替换容易产生运算优先级错误、重复定义问题;const变量类型固定,报错精准,调试方便。3)内存占用不同:define不占用内存,直接替换代码;const会开辟内存空间存储变量。4)使用场景:简单固定常量用#define(如端口号、宏开关);需要类型约束、参与运算、防止修改的常量,一律用const。4、sizeof和strlen的核心区别答案:1)本质不同:sizeof是运算符,计算数据类型/数组/指针的占用内存大小;strlen是库函数,计算有效字符串长度。2)计算规则不同:sizeof包含字符串结束符'\0';strlen只统计有效字符,遇到'\0'停止,不包含结束符。3)指针场景区别:数组名用sizeof可以算出数组总长度;数组名退化为指针后,sizeof只能得到指针大小(4字节/8字节,看系统),strlen不受影响。举例:charstr[]="abc";sizeof=4,strlen=3。二、指针核心篇(面试重中之重)1、什么是野指针?野指针的危害及规避方法答案:野指针就是指向未知合法内存地址的指针,没有初始化、指向已释放内存、越界访问都会产生野指针。危害:不会编译报错,运行时随机报错,可能程序崩溃、内存篡改、偶现bug,是C语言最难排查的问题之一。规避方法:1)指针定义时直接初始化为NULL;2)使用指针前先判断是否为NULL;3)内存释放后,立刻将指针置空,防止悬空指针;4)杜绝指针越界访问数组、栈内存。2、二级指针的使用场景,为什么要用二级指针?答案:一级指针只能修改指针指向的数据,无法修改指针本身的指向。如果需要在函数内部修改一级指针的地址,就必须用二级指针。常见实战场景:1)函数内动态开辟内存,需要将外部指针指向新内存;2)操作字符串数组、指针数组;3)链表节点的删除、插入优化操作。3、指针数组和数组指针的区别(高频混淆题)答案:核心口诀:看括号,优先级[]高于*1)指针数组:char*p[];本质是数组,数组里的每个元素是char类型指针。主要用来存多个字符串。2)数组指针:char(*p)[];本质是指针,专门指向一个二维数组/字符数组,用来操作整块数组数据。简单区分:不带括号是数组,带括号是指针。三、内存管理篇(实操必考)1、C语言四大内存分区及各自特点答案:1)栈区:存放局部变量、函数形参、函数返回地址。系统自动分配释放,空间小、速度快,栈溢出会直接崩溃。2)堆区:存放malloc、calloc动态开辟的内存。需要手动申请、手动free释放,不释放会造成内存泄漏,空间大、灵活。3)全局/静态区:存放全局变量、static静态变量。程序启动分配,程序结束释放,全程常驻内存。4)常量区:存放字符串常量、const只读常量。内存只读,修改会程序崩溃。2、malloc、calloc、realloc三者区别答案:1)malloc:单纯开辟指定大小堆内存,不初始化,内存里是随机脏数据,速度最快。2)calloc:开辟n个大小为size的内存,自动初始化为0,适合需要清零的场景,比malloc慢一点。3)realloc:重新调整已开辟堆内存的大小,可扩容、可缩容,会保留原数据,扩容失败可能返回空指针。实战注意:动态内存使用完必须free,free后指针置空,避免野指针和内存泄漏。3、内存泄漏是什么?怎么排查和避免?答案:内存泄漏:堆区动态开辟的内存,使用完没有free,程序运行期间这块内存一直被占用,无法回收,长期运行会导致内存占用越来越高,程序卡顿、崩溃。产生场景:函数内开辟内存未返回、分支逻辑遗漏free、程序异常跳出跳过free。规避排查:1)谁申请谁释放,配对编写malloc和free;2)所有分支逻辑保证都能执行到free;3)使用内存检测工具(valgrind)排查泄漏点。四、结构体与枚举、联合体篇1、结构体字节对齐原则,为什么要字节对齐?答案:字节对齐规则:结构体每个成员的偏移地址,必须是自身大小的整数倍;结构体整体大小,必须是最大成员大小的整数倍,不足补空字节。对齐目的:硬件读取内存时,对齐数据可以一次性读取,不用多次拼接,提升CPU读取效率,是硬件层面的优化,不是多余规则。补充:可以通过#pragmapack(n)手动修改对齐方式,嵌入式开发常用。2、结构体和联合体的区别答案:1)内存存储不同:结构体成员独立占用内存,总大小是所有成员大小+对齐填充;联合体成员共用同一块内存,同一时间只有一个成员有效。2)用途不同:结构体用来存储一组不同类型、同时有效的数据;联合体用来节省内存、数据类型转换(嵌入式寄存器操作常用)。3)大小不同:结构体占用空间大;联合体大小等于最大成员的大小。五、程序易错点与实操面试题1、全局变量和局部变量的区别答案:1)存储位置:全局变量存全局静态区;局部变量存栈区。2)生命周期:全局变量随程序启动创建、程序结束销毁;局部变量随函数调用创建、函数结束销毁。3)作用域:全局变量整个工程可用;局部变量仅当前函数可用。4)初始化:全局变量默认自动初始化为0;局部变量默认是随机脏数据,必须手动初始化。2、if和else的匹配规则,常见错误是什么?答案:匹配规则:else永远和离它最近的、未配对的if匹配,和缩进无关。常见错误:靠缩进判断匹配关系,导致逻辑错误。开发中必须用大括号包裹代码块,固定逻辑范围,杜绝隐形bug。3、数组越界会出现什么问题?答案:数组越界不会编译报错,属于运行时错误。越界会篡改栈内存、其他变量数据,导致程序偶发崩溃、数据错乱、逻辑异常,这类bug极难复现和排查,开发中必须严格判断数组下标范围。六、手写代码面试题(高频实操)1、手写字符串拷贝函数(不调用库函数)答案(最优面试版本):c
voidmy_strcpy(char*dest,constchar*src)
{
//判空,防止野指针
if(dest==NULL||src==NULL)
{
return;
}
//逐个赋值,直到遇到结束符
while(*src!='\0')
{
*dest=*src;
dest++;
src++;
}
//手动补结束符
*dest='\0';
}
面试加分点:加入空指针判断、用const修饰源字符串、手动补'\0',规避所有常规bug。2、手写代码判断大小端存储答案(简洁面试版):c
//小端:低字节存低地址大端:高字节存低地址
intcheck_endian()
{
intnum=0x1234;
//取第一个字节地址
char*p=(char*)#
if(*p==0x34)
{
return1;//小端
}
else
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026调味品包装设计趋势与品牌视觉升级方案研究
- 2026东盟国家铝土矿出口政策变动影响
- 2026特种化学品市场需求变化与技术创新趋势报告
- 2026大健康产业市场发展分析及前景与投资研究报告
- 2026中国液体化工物流行业网络化运营与协同发展分析报告
- 2026运动护具个性化定制市场需求与发展路径研究
- 2026中国碳纤维材料市场发展趋势及供需平衡与投资机会分析
- 2026中国VR-AR内容开发生态系统与用户体验研究报告
- 2026酿酒行业市场竞争格局与消费者口味变化分析报告
- 2026药物筛选自动化设备市场需求与技术创新调研
- 2026中国中医药国际化发展现状及市场准入壁垒分析报告
- 2026稀土储氢材料行业市场发展分析及前景趋势与投融资战略研究报告
- 2026年财政部高层财会人才中青年人才选拔笔试热及完整(附答案)
- 2026年高考全国1卷语文高考试题(原卷版)
- 消防报警主机移位施工方案及流程
- 2025年河南三支一扶(6月14日)真题(答案)
- GB/T 44693.3-2026危险化学品企业工艺平稳性第3 部分:标准操作程序编制与使用规范
- 妇产科妊娠糖尿病管理方案
- 2026中车株洲电力机车研究所有限公司春季全球校园招聘考试参考题库及答案解析
- 车速重新鉴定申请书
- 认知障碍患者护理课件
评论
0/150
提交评论