嵌入式笔试刷题(第27天)
1. C 和 C++ 中 struct 的区别?struct 和 class 的区别?
- 在 C 中: struct 仅用于定义数据结构,不能包含成员函数。struct 变量声明必须使用 struct 关键字。
- 在 C++ 中: struct 可以包含成员函数、构造函数、析构函数、访问控制(public/private)。默认访问权限为 public,而 class 默认是 private。
示例:
struct A { int x; void print() { std::cout << x << std::endl; } }; class B { int x; // 默认为 private };
2. volatile 的含义与示例
volatile
告诉编译器:该变量可能会被外部事件(如中断、线程)修改,禁止优化访问。
三个例子:
// 例1:中断标志 volatile int flag; void ISR() { flag = 1; } // 例2:多线程共享变量 volatile bool ready = false; // 例3:直接访问硬件寄存器 #define REG (*(volatile unsigned int*)0x12345678)
3. 代码问题分析与输出结果
int main() { char a; char *str = &a; strcpy(str, "hello"); // 未分配足够内存 printf(str); // 格式字符串漏洞 return 0; }
问题:
str
指向一个字符(1字节),但strcpy
要写入6字节,造成内存越界。printf(str);
使用不安全(格式字符串攻击风险)。- 修正:
char str[10]; strcpy(str, "hello"); printf("%s", str);
4. 良好的编程习惯
- 使用有意义的命名。
- 编写注释、文档。
- 控制变量作用域。
- 减少全局变量。
- 遵守编码规范。
- 定期重构,消除代码重复。
- 单一职责函数。
- 使用版本控制。
- 写单元测试。
5. 输出 1000~2000 闰年,每3个换行
规则:能被4整除但不能被100整除,或能被400整除。
#include <stdio.h> int main() { int count = 0; for (int year = 1000; year <= 2000; year++) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式笔试专栏 文章被收录于专栏
本专栏系统整理了嵌入式方向笔试中常见的知识点和高频考题,涵盖基础理论、常用算法、C语言陷阱、操作系统原理、驱动开发、常见外设通信协议(如 I2C/SPI/UART)、RTOS、Linux 内核、以及实用电路知识等内容。