在准备23届秋招的C语言基础部分,你需要掌握以下几个关键知识点: 1. **static的用途**: - 限制变量的作用域:`static`关键字可以用于局部变量,使其在函数调用结束后仍然保持其值,而不是被销毁。 - 设置变量的存储域:全局`static`变量只在声明它的文件中可见,提供了一种封装的手段。局部`static`变量在函数内部保持其状态,但只在首次调用该函数时初始化。 2. **带参数的宏和函数的区别**: - 类型检查:函数有严格的类型检查,而宏是文本替换,无类型检查。 - 执行时机:宏在预处理阶段处理,函数在程序执行时处理。 - 性能:宏展开更快,但可能导致边界问题,需要手动括号保护。 - 内存占用:宏不占用运行时内存,函数调用则需要内存开销。 - 源代码长度:宏展开使源码变长,函数调用不会增加源码长度。 3. **#ifndef/define/endif**: 这是C语言中的条件编译指令,用于防止头文件被多次包含。如果某个标识符未定义,则编译器会执行定义该标识符后的代码,一旦定义过,后续的包含就不会执行这部分代码,避免重复定义引起的错误。 4. **#include <>与#include "file.h"的区别**: - `<>`用于查找标准库路径,通常用于系统库头文件。 - `"file.h"`则首先在当前工作目录搜索,找不到时再查找其他包含路径,常用于用户自定义的头文件。 5. **堆栈溢出的原因**: - 递归调用过深:过多的函数调用保存的栈帧占用栈空间。 - 动态内存分配未释放:分配的内存未被正确释放,导致堆栈区域被非法占用。 - 数组越界:访问超出数组范围的内存,可能侵犯栈空间。 - 指针非法访问:指向无效地址的指针操作可能导致栈溢出。 6. **队列与栈的区别**: - 操作名称:队列是入队/出队,栈是进栈/出栈。 - 操作方式:队列在队尾插入,队头删除;栈在栈顶进行插入和删除。 - 操作原则:队列遵循先进先出(FIFO),栈遵循后进先出(LIFO)。 7. **程序内存分配**: - 栈区:存放函数参数、局部变量,由编译器自动分配和释放。 - 堆区:程序员分配,需手动释放,否则可能导致内存泄漏。 - BSS段:存放未初始化的全局变量和静态变量。 - 数据段:存放已初始化的全局变量和静态变量。 - 常量段:存放const修饰的全局变量和常量字符串。 - 代码段:存放函数的机器代码。 8. **编译运行过程**: - 预处理:处理预处理指令,引入头文件,去除注释,宏替换等。 - 编译:语法分析、词法分析、语义分析,生成汇编代码。 - 汇编:将汇编代码转换为机器码。 - 链接:将多个目标文件合并,解决符号引用,生成可执行文件。 9. **静态链接与动态链接**: - 静态链接:生成的可执行文件包含所有库函数,体积大,不依赖外部库。 - 动态链接:生成的可执行文件小,运行时依赖动态链接库,节省内存,但需要对应的库文件支持。 掌握以上知识点,对于理解和解答C语言基础以及嵌入式系统相关的问题会有很大帮助。在面试或笔试中,理解并能灵活运用这些概念是至关重要的。





























剩余10页未读,继续阅读


- 粉丝: 22
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- (源码)基于Arduino IoT云平台的物联网传感器监控系统.zip
- 双面钻铣组合机PLC控制系统研发设计方案[].doc
- 单片机楼道照明灯设计方案.doc
- 中国联通GSM网络优化服务实施方案.doc
- MCGS组态软件课程设计---基于MCGS组态软件实现自动门设计.doc
- 基于计算机人工智能技术的应用与未来发展分析.docx
- 5G网络切片技术浅析.docx
- PLC机械手控制设计方案.doc
- 培训资料移动营销的互联网实现.ppt
- (源码)基于LoRa和AESMAC的无线传感器网络安全防护系统.zip
- 数据仓库系统在移动通信网管的应用探讨.doc
- C程序设计循环结构程序设计.doc
- 基于BS模式单片机学习系统的方案设计书与实现在线学习大学本科方案设计书.doc
- 基于央行发行的数字货币的区块链技术研究.docx
- 大数据支持下智慧城市规划建设.docx
- 2009年2011年系统集成项目管理工程师试题题答案解析.docx


