"C语言终极宝典是一份全面的C语言学习资料,旨在帮助读者从入门到提升。这本书由1912制作,包含了基本概念、问答题等多个方面的内容,适合反复学习。"
1. 关键字`static`在C语言中的作用:
- 在函数内部,`static`修饰的变量在函数每次调用时保持其值,而不是每次调用都重置。
- 在函数外部(即全局作用域),`static`修饰的变量仅对本模块可见,实现了局部的全局变量。
- 在模块内部,`static`修饰的函数限制了其作用范围,只能在定义它的模块内被调用。
2. 引用与指针的区别:
- 引用必须在声明时初始化,而指针可以在任何时候被赋值。
- 引用一旦初始化后不能改变引用的对象,指针可以改变所指向的对象。
- 不存在空引用,但指针可以是NULL,表示不指向任何对象。
- 引用使用起来更像目标变量的别名,直接操作引用就是操作目标变量,而指针需要通过解引用操作。
3. `#ifndef/define/endif`宏用于防止头文件被多次包含,避免编译错误。
4. `#include`的两种形式:
- `<file.h>`是从标准库路径查找文件,适用于标准库头文件。
- `"file.h"`则从当前工作目录或编译系统定义的路径查找,常用于用户自定义头文件。
5. 实时系统的特性:
- 实时性:系统必须在规定的时间内完成任务。
- 可靠性:保证在规定时间内准确无误地执行。
6. 全局变量与局部变量的内存分配:
- 全局变量存储在静态数据区,生命周期始于程序开始,终于程序结束。
- 局部变量存储在栈上,随着函数调用的结束而被销毁。
7. 平衡二叉树:
- 是一种特殊的二叉树,其左子树和右子树都是平衡二叉树,并且左右子树的高度差不超过1。
8. 堆栈溢出的原因:
- 垃圾资源未被释放,导致内存耗尽。
- 过深的递归调用,超出栈的容量限制。
9. 冒泡排序的时间复杂度:
- 最坏情况下,冒泡排序的时间复杂度为O(n^2)。
10. 不能声明为虚函数的函数:
- 构造函数不能声明为虚函数,因为虚函数功能主要在对象实例化后使用,而构造过程是在对象创建时进行的。
11. 队列与栈的区别:
- 队列遵循先进先出(FIFO)原则,元素按顺序添加和移除。
- 栈遵循后进先出(LIFO)原则,元素最后加入的最先被移除。
12. 不能作为左值(赋值操作的目标)的情况:
- 静态数组的下标表达式,如`arr[5] = something;`
- 字符串字面量,如`"hello" = something;`
- 函数调用,如`func() = something;`
- `const`修饰的变量,如`const int x = 5; x = 10;`
这份资料详细解答了C语言中的一些关键概念和常见问题,对于C语言的学习者来说是非常宝贵的参考资料。通过理解和掌握这些知识点,可以有效提升编程技能和问题解决能力。