C++ Arm面试精华:理解static、引用与指针、头文件控制

需积分: 10 10 下载量 81 浏览量 更新于2024-07-26 收藏 270KB PDF 举报
在ARM面试宝典中,包含了多个关键的IT基础知识问题,旨在测试应聘者的理解和应用能力。以下是其中一些要点的详细解析: 1. 关键字`static`的作用:在C语言中,`static`是一个重要的关键字,具有多种作用。当用于函数内部时,它使变量在每次函数调用时保持其值;在模块内(函数外部),静态变量是局部全局的,仅限模块内函数访问,增强代码封装性;对于函数,静态限制了其作用域,使其成为模块内的私有成员。 2. 引用与指针的区别:引用是一种强类型别名,必须在创建时初始化且不可更改指向,而指针则允许未初始化或改变指向。引用避免了空指针,提高了代码清晰度。流操作符`<<`和`>>`、赋值操作符`=`以及拷贝构造函数的使用场景通常优先考虑引用。 3. #ifndef/#define/#endif的作用:这些预处理指令用于条件编译,防止头文件被重复包含,确保代码的唯一性。 4. `<file.h>`和`"file.h"`的区别:前者的`<`符号表示从标准库搜索头文件,而后者的`"`符号表示从当前工作目录查找,这是C++中引入路径别名的一种方式。 5. 实时系统的特性:实时系统强调在规定的时间内完成任务,其核心特点是实时性和可靠性,适用于需要严格时间约束的环境,如工业控制、航空等领域。 6. 全局变量和局部变量的内存位置:全局变量存储在静态数据区,具有生命周期贯穿整个程序,而局部变量存放在栈中,仅在函数调用期间存在。 7. 平衡二叉树定义:平衡二叉树是一种特殊的二叉树结构,每个节点的左右子树高度差不超过1,保证查找、插入和删除操作的时间复杂度相对较低。 8. 堆栈溢出原因:主要源于内存管理不当,比如未及时释放已分配的内存或深度过大的递归调用导致的内存空间不足。 9. 冒泡排序算法的时间复杂度:冒泡排序的最坏和平均情况下时间复杂度为O(n^2),属于低效但易于理解的排序算法。 10. 虚函数声明限制:构造函数不能声明为虚函数,因为它们在类实例化时会立即执行,不涉及多态性。 11. 队列和栈的区别:队列遵循先进先出(FIFO)原则,元素按顺序添加和删除,适合模拟等待队列;栈则遵循后进先出(LIFO)原则,新元素添加在顶部,删除也在顶部,常用于表达式求值和递归调用等场景。