"C语言宝典 d"
在C语言中,`static`关键字具有多重含义,是编程中的一个重要概念。首先,当在函数内部声明一个静态变量时,它会在每次函数调用之间保持其值,而不是像自动变量那样每次调用都会重置。这在需要在函数多次调用间保存状态的情况下非常有用。
其次,当在函数外部(全局作用域)声明一个静态变量时,它成为模块内的局部全局变量,即仅在当前源文件中可见,不会被其他源文件访问。这有助于避免全局变量污染和命名冲突问题,提高代码的封装性和安全性。
第三,如果一个函数被声明为静态,那么这个函数只能在定义它的同一个源文件内被调用。这被称为函数的静态链接,使得函数的使用范围受到限制,增强了代码的模块化。
引用与指针是C++中的两个重要概念,它们虽然相似,但有显著区别。引用必须在声明时初始化,并且一旦初始化后不能改变引用的对象,而指针可以在运行时改变所指向的对象。不存在空引用,但有空指针。引用提高了代码的可读性和安全性,而指针操作可能增加程序的复杂性。
在C++头文件中,`#ifndef/define/endif`块用于防止头文件被重复包含,确保每个源文件只执行一次其中的代码,避免编译错误。`#include<file.h>`通常用于引入标准库中的文件,而`#include"file.h"`用于引入用户自定义的头文件,查找路径不同。
实时系统的特性主要包括必须在规定时间内完成任务,以及高可靠性。全局变量存储在静态数据区,生命周期始于程序启动,终于程序结束;局部变量则存储在栈中,随函数调用和退出而动态分配和释放。
平衡二叉树是一种特殊的二叉树,其左右子树的高度差不超过1,且左右子树都是平衡二叉树,这保证了搜索效率的均衡。
堆栈溢出通常是由于递归调用过深或者内存分配不当(如忘记释放内存)导致的,可能导致程序崩溃或其他不可预见的行为。
冒泡排序的时间复杂度为O(n^2),是效率较低的排序算法。虚函数是C++中的多态特性,但构造函数不能声明为虚函数,因为构造过程在对象创建时发生,此时多态性尚未建立。
队列遵循先进先出(FIFO)原则,而栈遵循后进先出(LIFO)原则。这两者在数据结构中扮演着不同的角色,分别适用于不同的操作需求。
最后,有些函数或操作不能直接用作“=”运算符的左侧,例如数组、常量、引用等,因为这些类型不能被赋值。在编程时,需要理解这些限制以避免语法错误。