华为面试题合集:局部变量与全局变量

需积分: 3 1 下载量 54 浏览量 更新于2024-09-18 收藏 151KB DOC 举报
"华为面试题汇总,涵盖局部变量与全局变量的使用、全局变量在多文件中的处理、以及static关键字在全局变量、局部变量和函数中的应用" 在华为的面试中,程序员需要对C语言的基础概念有深入理解,特别是变量的生命周期和作用域。以下是针对题目内容的详细解释: 1. 局部变量与全局变量重名: 在C语言中,局部变量可以与全局变量同名。在函数内部定义的局部变量会屏蔽掉同名的全局变量。这意味着在函数内部使用这个变量时,实际上是指向局部变量的。如果想要访问全局变量,需要使用作用域解析运算符`::`来明确指定。例如,`global_var = global_var + 1;`表示使用全局变量,而`var = var + 1;`则是在当前作用域内操作局部变量。 2. 引用全局变量: 要引用已经定义的全局变量,通常有两种方法:一是通过包含定义全局变量的头文件,这样编译器在编译时就能找到全局变量的声明;二是使用`extern`关键字,在需要使用全局变量的文件中声明,告诉编译器这个变量在其他地方已定义。使用`extern`时,如果变量名拼写错误,编译期间不会报错,但链接时会因为找不到变量定义而报错。 3. 全局变量在多文件中的处理: 全局变量可以定义在头文件中,但为了避免命名冲突和链接错误,建议在每个C文件中以`static`修饰同名全局变量。`static`全局变量的作用域仅限于定义它的源文件,其他文件无法直接访问。如果在多个文件中都定义了同名的全局变量,且只有一个文件对其进行初始化,编译器在链接阶段不会报错。 4. 代码输出: 下列代码的输出是:"b,c,d:10,12,120"。这是因为: - `a=10;` 初始化`a`为10。 - `b=a++;` 先使用`a`的当前值10赋给`b`,然后`a`自增变为11。 - `c=++a;` 先将`a`自增为12,然后赋值给`c`。 - `d=10*a++;` 先计算`10*a`得到120,然后`a`自增为13(但这不影响`d`的值)。 - `printf`语句按顺序输出`b`、`c`和`d`的值。 5. static关键字的区别: - 静态全局变量(static全局变量)与非静态全局变量:两者都存在于程序的全局区域,但静态全局变量的作用域仅限于定义它的源文件,而非静态全局变量在整个程序中都可见。 - 静态局部变量(static局部变量)与非静态局部变量:非静态局部变量在函数调用结束后会被销毁,下次调用时重新创建。静态局部变量只在首次创建时初始化一次,后续调用时保持上次的值,且仅在其定义的函数内部可见。 - 静态函数(static函数)与普通函数:静态函数的作用域限制在定义它的源文件内,不能被其他源文件直接调用,提供了一种封装的机制。 掌握这些基本概念对于理解和解答华为面试中的C语言问题至关重要,同时也体现了编程基础的重要性。在实际编程中,合理使用`static`关键字可以提高代码的可维护性和减少潜在错误。