### 嵌入式C语言笔试面试题解析 #### 基本概念及其它问答题 **1. 关键字static的作用是什么?** 在C语言中,`static`关键字具有以下三种主要用途: 1. **在函数内部使用static声明变量**:这样的变量被称为静态局部变量。这种变量的特点是在函数调用结束之后仍然保留上次调用结束时的值,而不是像普通局部变量那样在每次函数调用时重新初始化。 2. **在函数外部使用static声明变量**:这种情况下声明的变量称为静态全局变量或模块级变量。此类变量仅在声明它的源文件中可见,即它只能被该源文件中的其他函数访问,而不能被其他源文件中的函数访问。这有助于封装代码,避免命名冲突。 3. **使用static声明函数**:这样声明的函数同样仅限于其所在的源文件内部可见。这意味着即使另一个源文件中也存在同名函数,它们也不会发生冲突。 理解`static`的关键作用在于它能够帮助开发者实现局部数据和函数的隐藏,从而增强代码的安全性和可维护性。 **2. “引用”与指针的区别是什么?** - **引用必须被初始化,而指针不必**。引用一旦创建就必须绑定到一个已存在的变量,而指针可以在任何时候被赋值为任何类型的地址(只要类型兼容)。 - **引用初始化后不可更改所引用的对象,而指针可以**。一旦一个引用被绑定到一个变量,就不能再绑定到另一个变量上;但是指针可以随时改变其所指向的对象。 - **不存在指向空值的引用,但存在指向空值的指针**。引用总是必须指向一个有效的对象,而指针可以为空。 **3. .h头文件中的ifndef/define/endif的作用?** 这些预处理指令组合起来用于防止头文件被重复包含。通常使用格式如下: ```c #ifndef HEADER_FILE_H #define HEADER_FILE_H // 头文件内容 #endif ``` 这样,无论头文件被包含多少次,其内容只会被编译一次,从而避免了重复定义等问题。 **4. #include<file.h>与#include"file.h"的区别?** - `#include <file.h>`:编译器会在标准库路径下查找名为`file.h`的文件。 - `#include "file.h"`:编译器首先在当前目录下查找名为`file.h`的文件,如果找不到,则会在标准库路径下继续查找。 **5. 描述实时系统的基本特性** 实时系统的两大基本特性是实时性和可靠性: - **实时性**:系统必须能够在规定的时间内响应事件。 - **可靠性**:系统必须能够持续稳定地运行,并提供准确的结果。 **6. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?** 全局变量和局部变量在内存中的存储位置不同: - **全局变量**:存储在静态数据区,生命周期从程序启动到程序结束。 - **局部变量**:存储在栈中,生命周期仅在函数执行过程中。 **7. 什么是平衡二叉树?** 平衡二叉树是一种特殊的二叉搜索树,它的左右两个子树的高度差不超过1,并且左右两个子树本身也都是平衡二叉树。 **8. 堆栈溢出一般是由什么原因导致的?** - **没有及时释放分配的内存**:例如,忘记释放动态分配的内存。 - **递归调用层数过深**:递归调用时栈帧不断增长,可能会超出栈空间的大小。 **9. 冒泡排序算法的时间复杂度是什么?** 冒泡排序的时间复杂度为O(n^2),其中n是数组的长度。 **10. 什么函数不能声明为虚函数?** 构造函数不能声明为虚函数。虚函数的主要目的是支持多态,而构造函数主要用于初始化对象,因此不需要多态性。 **11. 队列和栈有什么区别?** - **队列**:遵循先进先出(FIFO)原则。 - **栈**:遵循后进先出(LIFO)原则。 **12. 不能做switch()的参数类型** `switch`语句中的表达式不能是浮点数类型或其他非整数类型。 **13. 局部变量能否和全局变量重名?** 局部变量可以和全局变量重名,但在函数内部,局部变量会覆盖全局变量。 **14. 如何引用一个已经定义过的全局变量?** 可以通过引入相应的头文件或使用`extern`关键字来引用全局变量。 **15. 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?** 全局变量可以定义在多个.C文件包含的头文件中,但需要在每个.C文件中用`static`关键字声明以限制其作用域,或者确保只有一个.C文件对其进行初始化。 **16. 语句for(;1;)有什么问题?它是什么意思?** `for(;;1)`等同于`while(1)`,表示无限循环。 **17. do……while和while……do有什么区别?** - `do……while`:至少执行一次循环体然后进行条件判断。 - `while……do`:先判断条件再决定是否执行循环体。 **18. static全局变量、局部变量、函数与普通全局变量、局部变量、函数** - **static全局变量与普通全局变量的区别**:普通全局变量在整个程序中可见,而static全局变量仅在其所在源文件中可见。 - **static局部变量与普通局部变量的区别**:普通局部变量在每次函数调用时都会重新创建和销毁,而static局部变量在整个程序运行期间保持其值不变。 - **static函数与普通函数的区别**:普通函数可以在整个程序中被调用,而static函数仅限于其所在源文件内部调用。 总结来说,`static`关键字的主要功能在于限制变量或函数的作用域,从而提高代码的可维护性和安全性。
剩余63页未读,继续阅读
- s_super0012020-10-16资源不错,推荐!!
- 粉丝: 2
- 资源: 14
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助