C/C++面试精华:语法、内存理解与系统特性

需积分: 0 2 下载量 85 浏览量 更新于2024-08-01 收藏 169KB DOC 举报
C/C++作为底层编程语言,其面试题往往涵盖了语言基础、数据结构、内存管理、操作系统原理等多个方面。以下是一些关键知识点的详细解析: 1. **`static` 的用途**: - `static` 在C/C++中有两种常见用途: - 限制作用域:它可以限制变量的生命周期,使其仅在当前函数或代码块内部可见,防止其被意外修改。这对于模块化和控制变量可见性非常有用。 - 存储域:静态局部变量存储在静态数据区,只分配一次,常用于函数内的缓存或计数器。 2. **引用与指针的区别**: - 引用必须在创建时就初始化,并且一旦绑定到一个对象,就不能改变引用的目标。而指针可以在任何时候指向任何有效的地址,包括NULL。 - 没有空引用的概念,但存在空指针,这可能导致运行时错误。 3. **实时系统特性**: - 实时系统强调的是在规定的时间内完成任务,对响应时间和任务完成的确定性有极高的要求。它通常涉及到操作系统内核的设计,确保任务调度和中断处理的快速响应。 4. **全局变量与局部变量**: - 内存上的区别:全局变量存储在静态数据区,直到程序结束才释放,而局部变量存放在栈上,函数结束时自动销毁。 - 可见性和生命周期:全局变量在整个程序范围内可见,而局部变量仅在定义它的函数内部有效。 5. **平衡二叉树**: - 是一种特殊的二叉搜索树,每个节点的左右子树高度差不超过1,保持了较好的查找性能和空间效率。 6. **堆栈溢出原因**: - 当函数递归调用过深,或者动态内存分配超出堆栈容量,导致堆栈空间不足,从而引发溢出。 7. **虚函数和构造函数**: - 虚函数是面向对象编程中的概念,允许基类指针调用派生类的重写方法,而构造函数不能声明为虚函数,因为它们是通过隐式调用实现的。 8. **冒泡排序算法**: - 时间复杂度为 O(n^2),因为最坏情况下需要进行n(n-1)/2次比较和交换,不适合大规模数据排序。 9. **浮点数比较**: - 如果要检查一个float类型的x是否接近零,可以使用 `if(x > 0.000001 && x < -0.000001)` 这样的条件,排除非常小的数值误差。 10. **TCP/IP协议**: - Internet主要采用TCP/IP协议族,其层次结构包括应用层、传输层、网络层、数据链路层和物理层。 11. **switch语句的限制**: - switch的参数不能是实型(如float、double),因为实型类型不能精确地匹配整数常量。 12. **局部变量与全局变量命名规则**: - 局部变量和全局变量可以同名,但函数内部引用时会优先使用局部变量。在多文件编译时,全局变量通常使用`extern`声明,避免链接时可能出现的问题。 以上知识点涵盖了C/C++的基础语法、数据结构、内存管理和系统编程的基础概念,是面试者准备技术面试时需要深入理解的部分。