2. C语言核心基础高频面试题
本章覆盖嵌入式面试中最高频的C语言考点:指针与数组、volatile、动态内存管理、函数指针、数组与字符串。这些知识点在笔试、技术一面和二面中反复出现,是面试官评估候选人C语言功底的核心标尺。以下内容按问题→考察点→框架→示例→追问→避坑的结构展开,便于快速复习和模拟作答。
| 考点 | 核心要点 | 面试频率 |
|---|---|---|
| 指针与数组 | 内存分配、sizeof、传参退化、字符串常量 | ⭐⭐⭐⭐⭐ |
| volatile | 禁止优化、硬件寄存器、中断、多线程 | ⭐⭐⭐⭐⭐ |
| 动态内存管理 | malloc检查、free置空、谁分配谁释放、碎片 | ⭐⭐⭐⭐ |
| 函数指针 | 回调机制、函数表、跳转表、代码扩展性 | ⭐⭐⭐ |
| 数组与字符串 | 字符串常量区、字符数组、strcpy/strncpy安全 | ⭐⭐⭐⭐ |
📌 指针和数组有什么区别?请从内存分配、sizeof、访问方式和函数传参四个角度分析。
不要混淆数组名与指针变量,sizeof(arr) 与 sizeof(ptr) 结果不同。数组传参时必须传递长度,否则无法获取数组大小。字符串常量不可修改,字符数组可修改;用 strncpy 替代 strcpy 避免缓冲区溢出。