华为C/C++面试题解析:全局变量、循环与静态存储

5星 · 超过95%的资源 需积分: 9 57 下载量 40 浏览量 更新于2024-09-16 收藏 27KB TXT 举报
"C/C++面试题集,包含局部变量与全局变量的使用,全局变量的引用,静态变量的作用,循环结构的区别,代码输出解析,以及面试中的常见问题" 在C/C++编程语言中,面试题往往涉及到核心概念和最佳实践。以下是一些关键知识点的详细说明: 1. **局部变量与全局变量**: - 局部变量可以在函数内部声明,其作用域仅限于该函数。如果局部变量与全局变量同名,局部变量会遮蔽全局变量。要访问全局变量,需使用作用域解析运算符`::`。 - 在同一函数内,甚至可以多次声明同名的局部变量,它们各自在自己的作用域内有效。 2. **全局变量的引用**: - 使用`extern`关键字可以在其他文件中声明全局变量,但不分配存储空间。如果需要引用头文件中声明的全局变量,必须确保变量名称拼写正确,否则会在链接阶段出错。 3. **全局变量的定义**: - 可以在头文件中定义全局变量,但为了避免命名冲突,通常在多个C文件中使用`static`修饰全局变量,使其成为文件作用域的变量。 4. **`for( ; 1 ; )`循环**: - 这个循环与`while(1)`等价,表示无限循环,直到有明确的退出条件。 5. **`do...while`与`while...do`的区别**: - `do...while`循环先执行一次循环体,然后再检查条件。如果条件满足,继续执行,否则结束循环。 - `while...do`循环先检查条件,如果条件满足才执行循环体,因此`do...while`至少会执行一次。 6. **代码示例的输出**: - 给定的代码中,`b`会得到10,`c`得到11,`d`得到120,因为`a++`是后自增,`++a`是前自增,`d`的计算是在`a`自增之后进行的。 7. **静态变量**: - 静态变量(`static`)在局部作用域中持久化,即使函数结束,其值也会保留。 - 静态变量在内存中只分配一次,适用于在函数间共享数据或实现计数器等功能。 8. **实时系统与非实时系统**: - 实时系统强调任务的响应时间,对时间约束有严格要求。 - 非实时系统则没有这种严格的时间限制。 9. **空指针**: - `NULL`或`nullptr`表示没有指向任何对象的指针,使用时要确保安全。 10. **数组的初始化**: - 数组可以初始化,未初始化的数组元素值是不确定的。 11. **构造函数的默认参数**: - 构造函数可以有默认参数,方便在创建对象时省略某些参数。 12. **拷贝构造函数**: - 当一个对象作为另一个对象的初始化参数时,拷贝构造函数会被调用。 13. **常量成员函数**: - 常量成员函数不允许修改对象的状态,确保对象的不变性。 14. **浮点数比较**: - 比较浮点数时,通常使用一个微小的误差范围,如代码中的`if(x>0.000001&&x<-0.000001)`。 15. **TCP/IP协议栈**: - Internet通信基于TCP/IP协议栈,包括应用层、传输层、网络层和数据链路层。 16. **IP地址解析**: - ARP(Address Resolution Protocol)用于将IP地址转换为物理(MAC)地址。 17. **IP地址分类**: - IP地址分为A、B、C、D、E五类,其中A、B、C类用于主机,D类用于多播,E类预留。 这些知识点是C/C++编程和面试中常见的,理解并掌握它们对于开发者来说至关重要。