【C++知识点详解】
1. `static` 关键字的用途:
- 静态变量:在函数内部声明的`static`变量,其值在函数每次调用时都会保持,而不是每次调用都初始化。
- 局部静态变量:在函数外部,但作用域仅限于该文件内的`static`变量,可以被该文件内的函数访问,但对其他文件不可见,提供了一种数据隐藏的方式。
- 静态函数:在函数定义前加上`static`关键字,使得该函数只能在定义它的源文件内被调用,增强了模块化。
2. 引用与指针的区别:
- 引用必须在声明时初始化,而指针可以在任何时候被赋值。
- 引用一旦初始化后,不能改变引用的对象,而指针可以改变所指的对象。
- 不存在空引用,但指针可以为空。
3. 实时系统的特性:
- 实时性:系统必须在规定的时间内完成特定任务,否则可能导致系统失效。
- 可靠性:实时系统需要高可靠性,确保任务的准确执行。
4. 全局变量和局部变量的内存区别:
- 全局变量存储在静态存储区,程序运行期间一直存在。
- 局部变量存储在栈区,函数调用结束时自动释放。
5. 平衡二叉树的概念:
- 平衡二叉树是一种特殊的二叉树,每个节点的左子树和右子树都是平衡二叉树,且两者的高度差不超过1。
6. 堆栈溢出的原因:
- 没有及时释放不再使用的资源,如动态分配的内存或递归调用过深等,导致栈空间耗尽。
7. 虚函数的限制:
- 构造函数不能声明为虚函数,因为虚函数是在对象实例化后调用的,而构造函数在对象实例化过程中执行。
8. 冒泡排序的时间复杂度:
- 最坏情况下,冒泡排序的时间复杂度是O(n^2),其中n是待排序元素的数量。
9. 浮点数与零值比较的条件:
- 使用一个极小的正数(例如1e-6)作为比较阈值,判断x是否大于这个阈值或小于负的阈值。
10. Internet采用的网络协议:
- TCP/IP协议族,包括应用层、传输层、网络层、数据链路层和物理层。
11. IP地址与物理地址的转换:
- 使用ARP(地址解析协议)进行IP地址与物理地址(MAC地址)之间的转换。
12. IP地址结构:
- IP地址由网络号和主机号组成,通过子网掩码确定网络部分和主机部分。
13. 循环数数的C程序:
- 通过循环链表和取余操作实现,根据M和N的值,从1到N依次输出数的倍数。
14. `switch`语句的参数限制:
- `switch`语句的参数不能是浮点型,因为浮点数比较通常涉及精度问题,不适合用开关案例来处理。
15. 输出语句的结果:
- 同名字符串数组在内存中通常相邻存放,因此`str1==str2`和`str3==str4`输出`true`,`str5`和`str6`是常量字符串的指针,它们可能存储在不同的内存区域,所以`str5==str6`可能输出`false`。
16. 类型转换:
- 类B隐式转化为类A的情况包括:继承、自定义转换运算符、非显式构造函数和赋值操作。
17. `sizeof`的问题:
- 在`UpperCase`函数中,`sizeof(str)`计算的是整个数组的大小,包括字符串结束符`\0`,而`sizeof(str[0])`只计算单个字符的大小,可能导致索引超出实际字符范围。
- 在输出`str`的长度时,`sizeof(str)/sizeof(str[0])`正确计算了字符串的字符数量,不包含结束符。
18. `char2Hex`函数的问题:
- 当字符c等于0x9F时,`ch`的计算可能导致溢出,因为`('A'-'9'-1)`可能产生负数,应使用`'A'-'9'`来避免这种情况。