day18
·
第 1 题
题目:C 语言中数组名和指针有哪些核心区别? 答案:
- 数组名是常量地址,不可赋值修改;指针是变量,可更改指向。
sizeof(数组名)得到数组总字节大小;sizeof(指针)永远等于系统地址宽度(32 位 4 字节)。- 数组内存连续分配,栈 / 全局区;指针仅存放地址,指向堆、栈、常量区均可。
- 数组不能整体赋值,仅能逐个元素拷贝;指针可直接赋值切换指向。
第 2 题
题目:字符串常量char *str = "123"与字符数组char str[] = "123"存储与使用区别? 答案:
"123"存只读常量 Flash 段,指针指向该区域,*str='x'修改会触发崩溃;字符数组存放栈 / 全局区,内容可修改。- 指针仅占用 4 字节;数组占用 4 字节 + 结束符共 5 字节内存。
- 字符串指针可以直接更换指向;字符数组地址固定,不能整体赋值。
第 3 题
题目:void*空指针是什么?嵌入式开发有什么用途?有什么限制? 答案: void* 通用无类型指针,可以接收任意类型数据的地址,无法直接解引用。 用途:实现通用函数,如memcpy、malloc,统一处理不同长度、不同类型数据。 限制:解引用、指针运算前必须强制转换为具体类型;不能直接加减偏移。
第 4 题
题目:memcpy、strcpy、memmove 三者功能与适用场景区别? 答案:
- strcpy:只拷贝字符串,遇到
\0停止,不能拷贝二进制数据,源与目标重叠会出错。 - memcpy:拷贝指定长度内存块,支持二进制数据,不处理内存重叠,重叠场景数据错乱。
- memmove:安全内存拷贝,内部判断地址重叠,分两段拷贝,缓冲区重叠优先使用。
第 5 题
题目:简述 C 语言中全局变量的优缺点,嵌入式单片机开发中如何减少全局变量滥用? 答案: 优点:整个程序任意函数均可访问,生命周期全程有效,可替代静态局部变量传递数据。 缺点:全部共享访问,多中断 / 多任务易数据冲突;长期占用 RAM,无法自动释放;代码耦合度高,bug 难定位。 优化方案:
- 用 static 限制作用域,仅单个文件可见;
- 任务间改用消息队列、信号量传递数据;
- 函数传参、静态局部变量替代;
- 加临界区保护并发访问的全局变量。
更多推荐

所有评论(0)