嵌入式笔试刷题(第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 内核、以及实用电路知识等内容。
查看1道真题和解析