C++面试必备:局部与全局变量、extern与static的奥秘

需积分: 1 0 下载量 173 浏览量 更新于2024-07-31 收藏 139KB DOC 举报
"C++面试题集锦,涵盖了变量作用域、全局变量与局部变量、静态变量、以及预处理和变量声明等相关知识。" 在C++编程语言中,面试题通常会涉及很多核心概念,以便评估候选人的理解深度和技术熟练度。以下是对题目中涉及知识点的详细解释: 1. **局部变量与全局变量的重名问题**: - 局部变量可以在函数内部声明,其作用域仅限于该函数。如果全局变量和局部变量同名,局部变量会遮蔽全局变量,即在函数内部使用的是局部变量。若要访问全局变量,可以使用作用域解析运算符`::`。 2. **全局变量的引用**: - 要引用已定义的全局变量,可以通过在当前文件中包含定义它的头文件,或者使用`extern`关键字声明。使用`extern`关键字表示变量是在其他地方定义的,但在这里声明其存在。如果头文件中的声明有误,使用头文件方式引用时会在编译阶段报错;而使用`extern`时,编译阶段不检查变量定义,错误会在链接阶段暴露。 3. **全局变量在头文件中的声明**: - 全局变量可以在头文件中声明,但在多个.C文件中使用时,每个.C文件中必须有一个`static`修饰的同名全局变量。`static`使得变量的作用域限制在当前文件,避免了不同文件间的名称冲突。 4. **代码输出**: - 给出的代码中,`a`首先被赋值为10。`b`存储了`a`自增后的值,即10。`c`存储了`a`前自增后的值,即11。`d`等于10乘以`a`自增后的值,即120。所以输出应为`b,c,d:10,11,120`。 5. **静态变量的区别**: - **静态全局变量**:与普通全局变量相比,它们都在程序开始时初始化,但作用域仅限于声明它们的源文件。这意味着在其他源文件中无法访问这些变量,减少了命名冲突的可能性。 - **静态局部变量**:与普通局部变量(自动变量)相比,它们仅在第一次声明时初始化,且在整个函数调用期间保持其值。每次函数调用时,不会重新分配内存或初始化,这使得它们在函数多次调用中保留状态。 - **静态函数**:静态函数的作用域仅限于声明它的文件,不允许其他文件对其进行调用。这提供了封装,防止了函数名的冲突,并可能有助于提高程序的安全性。 这些面试题展示了对C++语言基础知识的掌握,包括变量的作用域、存储类别以及预处理指令的理解。熟练掌握这些概念对于成为一名合格的C++程序员至关重要。在面试中,除了理论知识,面试官还会关注候选人的实际编程能力、问题解决技巧和经验。