2. C语言核心基础高频面试题

本章覆盖嵌入式面试中最高频的C语言考点:指针与数组、volatile、动态内存管理、函数指针、数组与字符串。这些知识点在笔试、技术一面和二面中反复出现,是面试官评估候选人C语言功底的核心标尺。以下内容按问题→考察点→框架→示例→追问→避坑的结构展开,便于快速复习和模拟作答。

考点核心要点面试频率
指针与数组内存分配、sizeof、传参退化、字符串常量⭐⭐⭐⭐⭐
volatile禁止优化、硬件寄存器、中断、多线程⭐⭐⭐⭐⭐
动态内存管理malloc检查、free置空、谁分配谁释放、碎片⭐⭐⭐⭐
函数指针回调机制、函数表、跳转表、代码扩展性⭐⭐⭐
数组与字符串字符串常量区、字符数组、strcpy/strncpy安全⭐⭐⭐⭐
指针 vs 数组 回答框架图 指针 vs 数组 · 回答框架 数组 Array 指针 Pointer 内存分配 栈上连续空间 独立变量存地址 sizeof运算 返回总字节数 返回地址大小(4/8B) 访问方式 arr[i] 偏移访问 *ptr 间接寻址 传参退化 传参退化为指针 传递指针副本

📌 指针和数组有什么区别?请从内存分配、sizeof、访问方式和函数传参四个角度分析。

🎯 考察点
  • 指针和数组的底层内存模型
  • sizeof 对不同类型的行为差异
  • 数组名在表达式中的退化规则
  • 函数参数传递时的类型变化
📐 回答框架
  1. 内存分配:数组在栈上分配连续内存,指针是独立变量存储地址
  2. sizeof:数组返回总字节数,指针返回地址大小(4/8字节)
  3. 访问方式:数组通过基地址+偏移量访问,指针通过间接寻址
  4. 传参退化:数组作为函数参数退化为指针,丢失长度信息
💡 示例回答

数组在栈上分配连续内存,sizeof 返回总字节数;指针是存储地址的独立变量,sizeof 返回 4/8 字节。数组名是地址常量不可修改,指针可重新指向。函数传参时数组退化为指针,需额外传递长度参数,否则无法在函数内获取数组大小。

🔍 可能追问
  • 二维数组的指针表示(int (*p)[N] vs int *p[])?
  • 字符串数组与字符指针的区别(char arr[] vs char *p)?
  • 如何安全地在函数间传递数组并保留长度信息?
⚠️ 避坑提醒

不要混淆数组名与指针变量,sizeof(arr) 与 sizeof(ptr) 结果不同。数组传参时必须传递长度,否则无法获取数组大小。字符串常量不可修改,字符数组可修改;用 strncpy 替代 strcpy 避免缓冲区溢出。

volatile · 追问路径图 volatile 禁止编译器优化 ← 上一章 📖 返回目录 下一章 →