版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言经典面试真题(含答案·企业真实场景版)整套试题贴合中小企业、互联网嵌入式岗位真实面试/笔试风格,无冗余理论废话,聚焦高频考点、易错坑点、代码实操,适合求职自测、面试突击。题型包含简答题、代码题、判断题、压轴难题。一、基础概念简答题(高频必考)1、简述static关键字在C语言中的三种用法及作用?参考答案:(1)修饰局部变量:延长变量生命周期,程序运行期间不销毁,仅初始化一次,作用域仍局限于当前函数;(2)修饰全局变量:限制变量作用域,仅当前源文件可访问,其他文件无法引用;(3)修饰函数:将函数变为内部函数,仅当前源文件可调用,禁止跨文件调用。2、const关键字的常用场景及意义?参考答案:(1)修饰普通变量:变量值不可修改,只读属性;(2)修饰指针constchar*p:指针指向的内容不可改,指针本身地址可改;(3)修饰指针变量char*constp:指针地址不可改,指向的内容可改;(4)修饰函数参数:防止函数内部意外修改传入的实参数据,提升代码安全性。3、全局变量、局部变量、静态局部变量的区别?参考答案:生命周期:全局变量、静态局部变量随程序结束销毁;局部变量随函数调用结束销毁;作用域:全局变量整个工程有效;静态局部变量、普通局部变量仅函数内有效;初始化:全局和静态变量默认初始化为0;局部变量默认随机垃圾值,需手动初始化。4、头文件中#ifndef/#define/#endif的作用?参考答案:防止头文件重复包含。多个源文件同时引用同一个头文件时,避免变量、函数重复定义报错,是工程开发标准写法。5、#include<>和#include""的区别?参考答案:<>:优先查找系统库头文件,不查找当前项目目录,用于引用系统标准头文件;"":优先查找当前项目自定义目录,再查找系统目录,用于引用自定义头文件。二、指针与内存核心题(面试重灾区)1、指针*p和&p的区别?参考答案:*p:解引用,取指针指向内存空间中存储的数据;&p:取指针变量本身的地址,指针变量自身也占用内存,存在独立地址。2、野指针是什么?如何避免野指针?参考答案:野指针:指向未知、未申请、已释放内存的指针,无合法访问权限,会造成程序崩溃、段错误。避免方式:指针初始化赋值NULL;使用前判断指针非空;动态内存释放后及时置空;不返回局部变量地址。3、malloc、calloc、realloc的区别?参考答案:malloc:申请指定大小堆内存,内存初始值为随机垃圾值;calloc:申请n个指定大小的内存,自动初始化为0;realloc:重新调整已分配堆内存的大小,可扩容或缩容,会迁移原内存数据。4、堆和栈的区别?参考答案:栈:由系统自动分配释放,空间小、速度快,存储局部变量、函数参数、返回地址,超出栈空间会栈溢出;堆:由程序员手动malloc/free申请释放,空间大、速度慢,生命周期可控,全程需手动管理内存,否则会内存泄漏。三、结构体与枚举面试题1、结构体字节对齐的原则?为什么需要字节对齐?参考答案:对齐原则:每个成员变量偏移量为自身字节数的整数倍;结构体总大小为最大成员字节数的整数倍。作用:硬件读取内存时,对齐内存读取效率更高,避免硬件读取异常,适配CPU读写规则。2、结构体和联合体的区别?参考答案:结构体:成员变量独立占用内存,总大小为所有成员对齐后的总和,成员互不影响;联合体:所有成员共用同一块内存,同一时间仅一个成员有效,总大小为最大成员的大小,常用于数据类型转换、节省内存场景。四、代码改错/纠错题(笔试高频)找出以下代码的错误并修正代码1:内存泄漏错误c
voidtest()
{
int*p=(int*)malloc(4);
*p=10;
}错误:手动申请的堆内存未释放,函数结束后指针销毁,内存无法回收,造成内存泄漏。修正:函数结束前添加free(p);p=NULL;代码2:返回局部变量地址错误c
int*get_num()
{
inta=100;
return&a;
}错误:局部变量a存储在栈区,函数调用结束后栈内存释放,返回的地址为非法野指针,调用后数据错乱、程序崩溃。修正:将a改为static静态局部变量,或改用堆内存申请。五、编程实操题(面试手写代码)1、手写代码实现字符串反转(不调用库函数)c
#include<stdio.h>
voidstr_reverse(char*str)
{
if(str==NULL)return;
intlen=0;
char*p=str;
//计算字符串长度
while(*p!='\0')
{
len++;
p++;
}
//首尾交换反转
inti,j;
for(i=0,j=len-1;i<j;i++,j--)
{
chartemp=str[i];
str[i]=str[j];
str[j]=temp;
}
}
intmain()
{
charbuf[]="helloc";
str_reverse(buf);
printf("%s\n",buf);
return0;
}2、手写冒泡排序(整型数组升序排序)c
#include<stdio.h>
voidbubble_sort(intarr[],intn)
{
inti,j;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(arr[j]>arr[j+1])
{
inttemp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
intmain()
{
intarr[]={9,5,2,7,1,3};
intlen=sizeof(arr)/sizeof(arr[0]);
bubble_sort(arr,len);
for(inti=0;i<len;i++)
{
printf("%d",arr[i]);
}
return0;
}六、压轴易错判断题(企业笔试拉分题)1、charstr[]="abc";和char*str="abc";完全等价(错)解析:数组版本存储在栈区,内容可修改;指针版本指向常量字符串,存储在只读区,修改会段错误。2、未初始化的全局变量值为0(对)3、free释放内存后,指针变量会自动变为NULL(错)解析:free仅释放内存,指针地址不变,会变成野指针,需手动置空。4、数组名可以直接作为指针进行自增操作(错)解析:数组名是常量地址,不支持++/--运算,指针变量可以。七、面试口述高频问答1、程序崩溃最常见的几个原因?答:访问野指针、数组越界、栈溢出、重复释放内存、释放空指针、修改只读字符串、除数为0。2、什么是内存泄漏?怎么排查?答:堆内存申请后未释放,程序长期运行导致内存占
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年青海省玉树市高二历史上册期末考试测试卷及1套参考答案
- 2025年黑龙江省密山市高二生物上册期末考试测试卷含答案(培优B卷)
- 2026铜价波动下低压电缆企业套期保值策略研究报告
- 2026饮品行业展会经济效应与品牌露出价值量化评估报告
- 2026年产品推广方案提高产品竞争力方案
- 湖南省株洲市2026-2027学年高二上学期第一次月考化学自测卷01(范围:必修一二、选必一1-2单元)(解析版)
- 福建省企业员工培训课程体系方案
- 广东省广州市天河区老旧小区改造提升规划方案
- 2026年鞍钢电工考试题库(含答案)
- 2026年外科手消毒类模拟试题及答案详解
- 老年人认知障碍预防干预技术标准
- 2026年湖南中医药高等专科学校高职单招笔试职业技能测验试题库含答案解析3套试卷
- 2025年中国养老地产行业市场研究报告:CCRC与居家养老
- 2026-2027学年人教版八年级上学期数学第一次月考模拟测试抢分卷(含答案)
- 成本实操-有色金属矿采选成本核算SOP
- 教师五年专业发展目标达成情况个人总结
- 2025国家义务教育质量监测小学四年级语文试题
- 雨课堂学堂云在线《人工智能原理》单元测试考核答案
- 2025年4月自考03450公共部门人力资源管理试题
- T/CNESA 1003-2020电力储能系统用电池连接电缆
- 蒂森克虏伯电梯MC2-C控制系统用户手册 (一)
评论
0/150
提交评论