"这篇资料主要涉及C/C++编程语言的基础知识,包括静态变量的作用、引用与指针的区别、头文件的保护机制、包含文件的差异、实时系统特性、内存区域的区别、平衡二叉树的概念、堆栈溢出的原因、冒泡排序的时间复杂度以及虚函数的使用限制。这些知识点对于理解和编写C/C++程序至关重要,同时也是面试和笔试中常见的题目。"
1. 关键字`static`的作用:
- 在函数内部,`static`变量在函数多次调用中保持其值不变,即具有持久性。
- 在模块内(全局作用域),`static`变量只能被同一模块内的函数访问,实现局部全局变量。
- 在模块内,`static`修饰的函数只能在该模块内被调用,形成私有函数。
2. 引用与指针的区别:
- 引用在声明时必须初始化,之后不可更改引用对象。
- 指针可以改变所指的对象,可以为空或指向不同对象。
- 引用是目标变量的别名,而指针是存储地址的变量。
3. `#ifndef/define/endif`头文件保护机制:
这些预处理器指令用于防止头文件被多次包含,避免定义冲突。
4. `#include <file.h>`与`#include "file.h"`的区别:
- `<file.h>`通常用于标准库,编译器会从特定的系统路径查找。
- `"file.h"`则从当前源文件所在目录开始查找。
5. 实时系统的基本特性:
实时系统需要在规定时间内完成特定任务,强调及时性和可靠性。
6. 全局变量与局部变量的内存位置:
- 全局变量存储在静态存储区,生命周期始于程序开始,终于程序结束。
- 局部变量存储在栈中,生命周期仅限于所在的作用域。
7. 平衡二叉树:
平衡二叉树是一种特殊的二叉树,其左子树和右子树都是平衡的,且它们的高度差不超过1。
8. 堆栈溢出原因:
- 堆栈空间有限,过多的局部变量或深度递归可能导致空间耗尽。
- 内存未被正确释放也可能占用堆栈空间。
9. 冒泡排序时间复杂度:
冒泡排序的时间复杂度为O(n^2),效率较低。
10. 不能声明为虚函数的函数:
构造函数不能声明为虚函数,因为虚函数机制是在对象实例化后才生效的。
11. 队列与栈的区别:
- 队列遵循FIFO(先进先出)原则,元素按顺序添加和删除。
- 栈遵循LIFO(后进先出)原则,元素的添加和删除集中在栈顶进行。
这些基础知识是C/C++程序员必须掌握的,对于理解程序行为、优化代码以及解决编程问题至关重要。在面试和笔试中,这些知识点经常被用来测试候选人的基础功底。