嵌入式笔试刷题(第12天)
11. 全局变量和局部变量在内存中是否有区别?
✅ 有区别:
- 全局变量: 存储在 静态区(.data 或 .bss 段)生命周期为整个程序运行期间
- 局部变量: 存储在 栈区生命周期为当前函数调用期间
12. 联合体输出题
#include <stdio.h> union { int i; char x[2]; } a; void main() { a.x[0] = 10; a.x[1] = 1; printf("%d", a.i); }
- 在小端系统中(如 x86):
a.x[0]
是低位 → 存放0x0A
,a.x[1]
是高位 →0x01
a.i
低位为0x0A
,高位为0x01
,所以a.i = 0x010A = 266
✅ 输出结果:266
13. 指针与结构体内存分析题
struct data { int a; unsigned short b; }; int main(void) { data mData; mData.b = 0x0102; char *pData = (char *)&mData; printf("%d %d", sizeof(pData), (int)(*(pData + 4))); }
分析:
pData
是char*
,在 32 位系统中指针大小是 4 →sizeof(pData) == 4
pData + 4
是第5个字节,读取的是b
的高字节 →0x01
→ 输出1
✅ 输出结果:4 1
14. 实现 memcpy
函数
void *my_memcpy(void *dest, const void *src, size_t n) { char *d = (char *)dest; const char *s = (const char *)src; while (n--) { *d++ = *s++; } return dest; }
15. 浮点数转字符串函数
实现类似 sprintf
的功能:
#include <stdio.h> #include <stdlib.h> void float_to_string(float num, char *buf) { int int_part = (int)num; float frac = num - int_part; sprintf(buf, "%d.", int_part); frac *= 100000; // 保留5位小数 char frac_str[16]; sprintf(frac_str, "%0
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式笔试专栏 文章被收录于专栏
本专栏系统整理了嵌入式方向笔试中常见的知识点和高频考题,涵盖基础理论、常用算法、C语言陷阱、操作系统原理、驱动开发、常见外设通信协议(如 I2C/SPI/UART)、RTOS、Linux 内核、以及实用电路知识等内容。