嵌入式笔试刷题(第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 内核、以及实用电路知识等内容。

全部评论
点赞 回复 分享
发布于 04-25 21:44 山西
接好运
点赞 回复 分享
发布于 04-25 17:29 黑龙江

相关推荐

06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
不亏是提前批,神仙打架,鼠鼠不配了
站队站对牛:现在92都报工艺岗了
投递韶音科技等公司10个岗位
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务