C语言面试深度解析:局部与全局变量、static的作用

需积分: 9 12 下载量 164 浏览量 更新于2024-07-28 收藏 262KB DOC 举报
"C经典面试题" C语言作为编程的基础,常常在面试中被用来测试候选人的基础知识和理解能力。以下是一些常见的C语言面试题及其解析: 1. 局部变量能否和全局变量重名? 在C语言中,局部变量可以在函数内部声明,并与全局变量具有相同的名称。当在函数内部引用该变量时,会优先使用局部变量,全局变量会被局部变量遮蔽。若要访问全局变量,可以使用作用域解析运算符 `::`。 2. 如何引用一个已定义过的全局变量? 引用全局变量有两种方式:一是通过包含包含该全局变量声明的头文件;二是使用 `extern` 关键字。包含头文件的方式在编译时会检查变量是否存在,如果头文件写错,编译阶段就会报错。而使用 `extern` 关键字仅声明变量的存在,如果链接时未找到变量定义,会在链接阶段报错。 3. 全局变量可否定义在可被多个.C文件包含的头文件中? 是可以的,但为了避免命名冲突,建议在一个C文件中对全局变量进行定义并初始化,其他C文件中使用 `extern` 关键字声明。如果在不同文件中都定义了同名的全局变量且赋值,链接时会报错。 4. 下列代码的输出内容是什么? ```c #include<stdio.h> int main(void) { int a, b, c, d; a = 10; b = a++; // b = 10, a = 11 c = ++a; // c = 12, a = 12 d = 10 * a++; // d = 120, a = 13 printf("b,c,d:%d,%d,%d", b, c, d); return 0; } ``` 这段代码的输出将是:`b,c,d:10,12,120` 5. static全局变量与普通全局变量的区别: - 静态全局变量的生命周期始于程序开始,终于程序结束,但其作用域仅限于定义它的源文件。在其他源文件中,它们不可见,避免了全局变量的命名冲突。 - 普通全局变量的作用域覆盖整个程序,所有源文件都可以访问,容易引发命名冲突。 6. static局部变量和普通局部变量的区别: - 静态局部变量在函数调用结束后不会被销毁,下一次调用时仍保留上次的值,其生命周期跨越多次函数调用。 - 普通局部变量每次函数调用都会重新初始化,仅在当前函数调用中有效。 7. static函数与普通函数的区别: - 静态函数的作用域仅限于定义它的源文件,其他文件无法直接调用。这增加了封装性,减少了命名冲突。 - 普通函数(非静态函数)可以被程序中的任何部分调用,只要正确包含了相应的头文件。 这些面试题涉及到C语言的关键概念,包括变量的作用域、存储类别以及预处理等,对理解和使用C语言至关重要。掌握这些知识不仅可以帮助在面试中脱颖而出,也是编写可靠C程序的基础。