C/C++面试深度解析:局部与全局变量、静态变量与函数

4星 · 超过85%的资源 需积分: 9 7 下载量 61 浏览量 更新于2024-08-02 收藏 477KB DOC 举报
"C/C++面试常见问题深入分析及个人总结" 在C/C++面试中,经常会遇到一些核心概念和技术点的考察。以下是对这些知识点的详细解析: 1. **数组与指针的关系**: 在示例代码中,`inta[5]` 是一个整型数组,`&a[0]` 指向数组的第一个元素,`&a` 指向整个数组的首地址。`ptr` 指向数组第二个元素的地址,`ptr1` 指向下一个整型元素的地址(即数组之后),`ptr2` 指向`a`所代表的内存区域的下一个整型元素。这段代码的输出可能不按预期,因为指针的加法操作是基于指针所指向的数据类型。 2. **局部变量与全局变量**: 局部变量可以与全局变量同名,但它们的作用域不同。在函数内部定义的局部变量会遮蔽同名的全局变量。要访问全局变量,可以使用作用域解析运算符 `::`。此外,局部变量的生命周期仅限于其所在的作用域,而全局变量在整个程序执行期间都存在。 3. **全局变量的引用**: 使用 `extern` 关键字可以在其他文件中引用全局变量。通过包含头文件或直接使用 `extern` 声明,可以访问全局变量。如果头文件中的声明有误,编译期间可能不报错,但在链接阶段会报错。 4. **全局变量的初始化**: 可以在头文件中定义全局变量,但为了避免重复定义导致的链接错误,不同C文件中应以 `static` 形式声明同名全局变量。静态全局变量只在其定义的源文件内可见。 5. **静态变量的特性**: - **静态全局变量**:只在其定义的源文件内有效,不会被其他源文件访问,且只初始化一次。 - **静态局部变量**:只在定义它的函数或块中有效,并且每次调用该函数时,其值保持不变,即它具有持久性。 - **静态函数**:其作用域仅限于定义它的文件,不允许其他文件直接访问。这样的函数通常用于封装实现细节,避免命名冲突。 6. **自增自减运算符**: 示例代码中的自增自减运算符涉及到运算符优先级和结合性。`a++` 是后置自增,返回 `a` 的原始值,然后增加 `a`;`++a` 是前置自增,先增加 `a`,再返回新的值。因此,`b` 获得的是 `10`,`c` 获得的是 `11`,而 `d` 的计算依赖于 `a++` 的结果,但由于输出语句没有正确指定变量类型,所以输出可能不清晰。 7. **作用域和生命周期**: 局部变量在定义它的代码块结束时销毁,而全局变量在整个程序运行期间都存在。静态局部变量在函数首次调用时初始化,之后每次调用时保持其前次调用的值。 以上就是对C/C++面试中常考知识点的深入分析,包括数组、指针、变量的作用域、生命周期、以及静态变量和函数的特性。理解并掌握这些概念对于面试和实际编程都是非常关键的。