华为C++面试题解析:局部变量与全局变量的较量

需积分: 0 1 下载量 170 浏览量 更新于2024-09-18 收藏 56KB DOC 举报
"这份文档包含了华为公司C++面试题的相关内容,主要涉及C++语言的基础知识,包括变量的作用域、全局变量的使用、循环结构、预处理指令以及static关键字的应用。" 在这份华为的C++面试题中,我们可以深入探讨以下几个关键知识点: 1. **局部变量与全局变量的关系**: - 局部变量可以在函数内部定义,与全局变量同名。在这种情况下,局部变量会遮蔽全局变量,即在函数内部使用同名变量时,实际上是指向局部变量的。如果需要访问全局变量,需要使用作用域解析运算符`::`。 - 在同一个函数内,可以多次定义同名的局部变量,它们的作用域仅限于各自的代码块。 2. **全局变量的引用**: - 使用`extern`关键字可以引用已经在其他文件中定义的全局变量。通过包含头文件或直接使用`extern`声明,都可以实现全局变量的跨文件引用。需要注意的是,错误的引用可能会导致编译或链接错误。 3. **全局变量的存储**: - 全局变量可以在头文件中定义,但为了避免命名冲突,可以在不同C文件中使用`static`声明同名全局变量。这样,每个文件中的变量都是独立的,只在其所在文件内有效。 4. **循环结构对比**: - `for(;1;)`等同于`while(1)`,表示无限循环,因为条件始终为真。 - `do...while`和`while...do`的区别在于执行顺序。`do...while`先执行循环体,再检查条件,至少保证循环体执行一次;而`while...do`先检查条件,条件满足才执行循环体。 5. **预处理及变量自增**: - 示例代码中的输出问题涉及到自增运算符(`++`)的使用。`a++`是在赋值操作后增加,`++a`是在赋值操作前增加。因此,`b`保存了`a`自增前的值(10),`c`保存了自增后的值(11),而`d`的计算中,`a`再次自增,所以`d`等于120。 6. **static关键字的应用**: - **静态全局变量**:只在定义它的源文件内可见,限制了其作用域,减少命名冲突。 - **静态局部变量**:在函数调用之间保持其值,每次调用都会记住上次的值,而不是每次都初始化。 - **静态函数**:函数的链接属性变为静态,使得该函数仅在当前编译单元内可见,常用于实现私有函数,防止名字冲突和不必要的外部依赖。 这些面试题涵盖了C++基础语法和高级特性,是评估C++程序员对语言理解深度和广度的良好工具。理解和掌握这些知识点对于在华为或其他IT公司从事C++开发工作至关重要。