嵌入式笔试专栏(第7天)
11. C 语言中 const 和 define 有什么区别?
答案:
编译时处理 |
预处理阶段替换 |
编译阶段常量 |
类型检查 |
无类型 |
有类型 |
调试信息 |
无 |
有 |
作用域 |
全局(文件级) |
遵循 C 的作用域规则 |
建议 |
尽量用
替代
常量定义,提高类型安全性 |
12. 请写出两个线程同步的方法,并简述原理。
答案:
- 互斥锁(Mutex): 原理:线程访问共享资源前加锁,访问完释放锁,确保同一时刻只有一个线程访问。
- 信号量(Semaphore): 原理:通过计数器控制多个线程对共享资源的访问,信号量为0时其余线程阻塞。
13. 简述堆和栈的区别。
答案:
管理方式 |
编译器自动分配释放 |
程序员手动管理 |
生命周期 |
函数调用结束后自动销毁 |
手动释放,否则会内存泄漏 |
大小 |
一般较小(KB~MB) |
较大(取决于系统) |
分配速度 |
快 |
慢 |
使用方式 |
局部变量 |
malloc/new 分配 |
14. 下面这段代码有问题吗?如果有,请指出问题所在:
char *str; strcpy(str, "hello world");
答案:
有问题:str
是未初始化的指针,未指向有效内存,调用 strcpy
会导致段错误(segmentation fault)。应先分配内存:
char str[100]; // 或使用 malloc strcpy(str, "hello world");
15. C 语言中,什么是悬垂指针(Dangling Pointer)?
答案:
悬垂指针是指指向已释放内存的指针。常见场景:
- 函数返回了局部变量地址
- 内存被 之后继续使用该
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式笔试专栏 文章被收录于专栏
本专栏系统整理了嵌入式方向笔试中常见的知识点和高频考题,涵盖基础理论、常用算法、C语言陷阱、操作系统原理、驱动开发、常见外设通信协议(如 I2C/SPI/UART)、RTOS、Linux 内核、以及实用电路知识等内容。