C语言开发工程师面试笔试真题(含答案)_第1页
C语言开发工程师面试笔试真题(含答案)_第2页
C语言开发工程师面试笔试真题(含答案)_第3页
C语言开发工程师面试笔试真题(含答案)_第4页
C语言开发工程师面试笔试真题(含答案)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言开发工程师面试笔试真题(含答案)说明:本套试题贴合一线企业真实面试、笔试场景,剔除书面化空洞考题,聚焦工程实操、易错点、底层原理,适用于初级/中级C语言开发岗位考核,包含选择、填空、判断题、程序分析题、编程题、简答题,附完整参考答案。一、单项选择题(10题)1.以下关于C语言变量作用域,说法正确的是()A.全局变量仅在main函数中有效B.局部变量在函数调用结束后内存不会释放C.静态局部变量仅初始化一次,程序运行期间常驻内存D.静态全局变量可以跨文件调用2.已知char*p="123456";,执行p++后,*p的值为()A.'1'B.'2'C.2D.乱码3.以下关键字中,不能修饰局部变量的是()A.staticB.externC.constD.register4.结构体变量大小计算,以下代码输出结果为()(32位系统)c

structTest{

chara;

intb;

shortc;

};A.7B.8C.10D.125.关于栈和堆内存,说法错误的是()A.栈内存由系统自动分配、自动释放B.堆内存需要手动malloc申请、free释放C.栈的空间远大于堆空间D.堆内存容易出现内存泄漏问题6.sizeof(char*)在64位系统下的返回值是()A.1B.4C.8D.不确定7.以下循环的执行次数是()c

for(inti=0;i<10;i++){

if(i==5)continue;

}A.9次B.10次C.5次D.6次8.函数形参传递中,地址传递相比于值传递的核心优势是()A.代码更简洁B.执行速度更快C.可修改实参数据、节省内存D.无优势9.以下不会造成野指针问题的操作是()A.char*p;*p='a';B.int*p=NULL;C.int*p=(int*)0x123456;D.局部变量指针返回主函数10.预处理指令#define的特点是()A.有类型检查B.仅做文本替换,无语法校验C.运行时执行D.可以递归定义二、判断题(5题,对√错×)1.指针变量本身占用的内存大小,与指向的数据类型无关。()2.全局变量和静态变量都存放在数据段,不占用栈空间。()3.free释放指针内存后,指针变量会自动置空。()4.数组名作为函数参数时,会退化为指针。()5.const修饰的变量,数值完全不能修改。()三、程序输出分析题(3题,写出运行结果)1.写出以下代码输出结果c

#include<stdio.h>

intmain()

{

inta=10;

intb=sizeof(a++);

printf("%d%d",a,b);

return0;

}2.写出以下代码输出结果c

#include<stdio.h>

voidtest(int*p)

{

p=NULL;

}

intmain()

{

intnum=100;

int*p=#

test(p);

printf("%p",p);

return0;

}3.写出以下代码输出结果c

#include<stdio.h>

intmain()

{

charstr[]="abcdef";

char*p=str;

printf("%d\n",strlen(p+2));

return0;

}四、改错题(找出代码BUG并修正)以下两段代码均存在典型工程BUG,请逐一指出问题并修改正确。1.内存泄漏、野指针问题代码c

voidfunc()

{

int*p=(int*)malloc(4);

*p=10;

}2.数组字符串赋值错误代码c

intmain()

{

charstr[10];

str="hello";

printf("%s",str);

return0;

}五、手写编程题(2题,工程常用场景)1.编写C语言函数,实现字符串反转(不使用库函数,原生实现)2.编写代码,实现动态内存开辟,输入N个整型数据,计算平均值并输出,最后完整释放内存六、简答题(面试口述高频题)1.简述堆栈的区别,日常开发中栈溢出的常见原因?2.什么是野指针?野指针的产生场景及规避方法?3.const和#define的区别?工程中分别适用什么场景?4.结构体内存对齐的原则是什么?为什么需要内存对齐?5.简述static关键字的三个核心作用?参考答案一、单项选择题答案1.C2.B3.B4.D5.C6.C7.B8.C9.B10.B核心解析:3.extern用于声明外部变量,无法定义局部变量;4.32位系统结构体对齐:char(1)+填充3+int(4)+short(2)+填充2,总大小12;5.堆空间远大于栈空间;9.NULL指针是空指针,不属于野指针。二、判断题答案1.√2.√3.×4.√5.×核心解析:3.free仅释放内存,不会清空指针变量,需手动置空;5.const修饰的局部变量可通过指针间接修改。三、程序输出分析题答案1.输出:104解析:sizeof是编译期运算符,仅判断变量类型,不会执行a++运算。2.输出:变量num的内存地址(非空)解析:函数传参为值传递,形参p置空不会影响主函数实参指针。3.输出:4解析:p+2指向字符'c',字符串剩余内容为"cdef",长度为4。四、改错题答案1.BUG:malloc开辟的堆内存未释放,造成内存泄漏;函数结束后指针销毁,内存无法回收。c

voidfunc()

{

int*p=(int*)malloc(4);

*p=10;

free(p);//手动释放堆内存

p=NULL;//置空指针,避免野指针

}2.BUG:数组名是常量指针,不能直接被整体赋值,仅可初始化或逐字符/strcpy赋值。c

#include<stdio.h>

#include<string.h>

intmain()

{

charstr[10];

strcpy(str,"hello");//使用字符串拷贝函数

printf("%s",str);

return0;

}五、手写编程题参考答案1.字符串反转实现c

#include<stdio.h>

voidstrReverse(char*str)

{

if(str==NULL)return;

//计算字符串长度

intlen=0;

while(str[len]!='\0')

{

len++;

}

//首尾交换反转

inti,j;

chartemp;

for(i=0,j=len-1;i<j;i++,j--)

{

temp=str[i];

str[i]=str[j];

str[j]=temp;

}

}

intmain()

{

charbuf[100]="helloctest";

strReverse(buf);

printf("反转结果:%s\n",buf);

return0;

}2.动态内存计算平均值c

#include<stdio.h>

#include<stdlib.h>

intmain()

{

intn;

printf("请输入数据个数:");

scanf("%d",&n);

//动态开辟内存

int*arr=(int*)malloc(n*sizeof(int));

if(arr==NULL)//内存开辟失败校验

{

printf("内存开辟失败!\n");

return-1;

}

//输入数据

doublesum=0;

for(inti=0;i<n;i++)

{

scanf("%d",&arr[i]);

sum+=arr[i];

}

//计算输出平均值

doubleavg=sum/n;

printf("平均值为:%.2f\n",avg);

//释放内存

free(arr);

arr=NULL;

return0;

}六、简答题参考答案(面试标准口述答案)1.堆栈区别及栈溢出原因区别:①栈由系统自动管理,堆由程序员手动申请和释放;②栈空间小、速度快,堆空间大、速度慢;③栈存放局部变量、函数参数、返回地址,堆存放动态内存数据;④栈不会内存泄漏,堆易出现内存泄漏。栈溢出常见原因:局部变量定义过多、递归深度过大、数组定义尺寸过大、函数嵌套过深。2.野指针定义、场景及规避方法野指针:指向随机非法内存地址的指针,无合法指向、不受系统管控。产生场景:指针未初始化、free后未置空、返回局部变量地址、越界访问指针。规避方法:指针定义即初始化、free后立即置空、禁止返回局部变量指针、做指针合法性校验。3.const和#define区别①#define是预处理文本替换,无类型、无校验,编译前执行;const是常量修饰符,有数据类型,编译期校验;②#define不占用内存,const常量占用数据段内存;③const可受作用域限制,#define全局生效;场景:批量固定宏定义用#define,需要类型安全

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论