C语言面试精华:局部与全局变量、static的奥秘

需积分: 7 0 下载量 52 浏览量 更新于2024-07-26 3 收藏 242KB DOC 举报
"C语言经典面试题集合,涵盖了华为等公司常见的面试问题,涉及局部变量与全局变量的使用、全局变量的声明与初始化、以及static修饰的变量和函数的区别。" 1. 局部变量与全局变量重名: 在C语言中,如果局部变量与全局变量同名,局部变量会在其作用域内屏蔽全局变量。这意味着在函数内部,当你使用同名变量时,实际使用的是局部变量。如果要访问全局变量,需要使用作用域解析运算符`::`。 2. 引用全局变量: 引用已定义的全局变量有两种方式:一是通过包含包含该变量声明的头文件;二是使用`extern`关键字。包含头文件的方式在编译时检查变量是否存在,如果头文件编写错误,编译阶段就会报错。而使用`extern`声明时,如果变量未被正确声明,错误将在链接阶段出现。 3. 全局变量在头文件中的使用: 全局变量可以定义在头文件中,并在多个.C文件中包含。但是,为了避免命名冲突和链接错误,其中一个文件应该对全局变量进行初始化,其他文件则使用`extern`声明但不初始化。 4. 代码输出分析: ```c #include<stdio.h> int main(void) { int a, b, c, d; a = 10; b = a++; // b = 10 c = ++a; // a = 11, c = 11 d = 10 * a++; // a = 12, d = 120 printf("b,c,d:%d,%d,%d", b, c, d); return 0; } ``` 这段代码的输出将是:`b,c,d:10,11,120` 5. `static`修饰的变量和函数的区别: - 静态全局变量(static全局变量)仅在其定义的源文件内可见,不允许其他源文件访问,这增加了变量的作用域限制,减少了命名冲突的可能性。 - 静态局部变量(static局部变量)在函数调用结束后不会被销毁,下次调用时仍保留上次的值,其生命周期贯穿整个程序运行时间,不同于普通局部变量每次调用都会初始化。 - 静态函数(static函数)的可见性也仅限于定义它的源文件,不允许其他文件直接调用,起到了封装的作用,增加了代码的安全性和模块化。 了解这些知识点对于理解和解答C语言面试题至关重要,特别是关于变量的作用域、存储类别以及`static`关键字的使用。掌握这些可以帮助开发者写出更安全、更高效且易于维护的C语言代码。