- 0
- 0
- 约5.74千字
- 约 19页
- 2026-01-14 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年C开发工程师面试题目全收录
一、基础知识(10题,每题2分)
1.题目:
请解释`static`关键字在C语言中有哪些用法,并分别举例说明。
答案:
`static`在C语言中有两种主要用法:
-局部静态变量:在函数内部声明,但只刌初始化一次,且在函数调用结束后不会销毁,下次调用时仍保留之前的值。
c
voidfunc(){
staticintcount=0;
count++;
printf(%d\n,count);
}
-全局静态变量:在文件内部声明,外部文件不可访问,实现模块化。
c
//file1.c
staticintsecret=42;
2.题目:
什么是指针的指针?请说明其用途。
答案:
指针的指针是指向指针的变量,例如`intptr`。常用于动态二维数组或链表操作。
c
intmain(){
inta=5;
intp=a;
intpp=p;
printf(%d\n,pp);//输出5
}
3.题目:
`#define`和`typedef`的区别是什么?
答案:
-`#define`:预处理器宏,文本替换,如`#definePI3.14`。
-`typedef`:定义类型别名,如`typedefintInt32`。后者更安全(避免重定义问题)。
4.题目:
解释`volatile`关键字的作用,并举例说明。
答案:
`volatile`告诉编译器变量可能被外部修改,禁止优化。常用于硬件寄存器操作。
c
volatileintflag=0;
if(flag){
//执行操作
}
5.题目:
`malloc`和`calloc`的区别是什么?
答案:
-`malloc`:分配内存,不初始化。
-`calloc`:分配内存并初始化为零。
c
intp1=(int)malloc(10sizeof(int));
intp2=(int)calloc(10,sizeof(int));
6.题目:
什么是内存泄漏?如何避免?
答案:
内存泄漏是指分配后未释放的内存。避免方法:使用`free`手动释放,或使用智能指针(C++)。
7.题目:
`switch`语句中,`case`标签可以省略吗?
答案:
可以省略,表示“fallthrough”(默认执行下一个`case`),需谨慎使用。
8.题目:
解释`const`的两种用法:
答案:
-常量:`constinta=5;`
-修饰指针:`intconstp=a;`(指针不可变)
9.题目:
什么是三元运算符`?:`?
答案:
条件运算符:`x?y:z`,若`x`为真则返回`y`,否则返回`z`。
10.题目:
`do-while`循环和`while`循环的区别是什么?
答案:
`do-while`至少执行一次,`while`先判断条件。
二、算法与数据结构(8题,每题3分)
1.题目:
请实现快速排序算法,并说明其时间复杂度。
答案:
c
voidquicksort(intarr[],intleft,intright){
if(left=right)return;
intpivot=arr[right];
inti=left;
for(intj=left;jright;j++){
if(arr[j]pivot){
swap(arr[i],arr[j]);
i++;
}
}
swap(arr[i],arr[right]);
quicksort(arr,left,i-1);
quicksort(arr,i+1,right);
}
时间复杂度:O(nlogn),最坏O(n2)。
2.题目:
如何实现二叉树的遍历(前序、中序、后序)?
答案:
前序(根左右):
c
voidpreorder(Noderoot){
if(!root)return;
printf(%d,root-val);
preorder(root-left);
preorder(root-right);
}
中序(左根右):同上,交换打印顺序。
3.题目:
请实现链表反转。
答案:
c
voidreverseList(Nodehead){
Nodeprev=NULL,curr=head;
while(curr){
Nodenext=curr-next;
curr-next=prev;
prev=curr;
curr=next;
}
head=prev;
}
4.题目:
原创力文档

文档评论(0)