华为面试题解析:局部变量、全局变量与静态变量

需积分: 10 14 下载量 179 浏览量 更新于2024-09-22 收藏 48KB DOC 举报
"这是2010年华为面试中的一些试题及对应答案,涵盖了C语言的基础知识,包括变量的作用域、全局变量的使用、循环结构以及静态变量的特点等。" 在面试过程中,掌握这些知识点对于应聘华为这样的技术型企业至关重要。下面我们将深入探讨这些面试题目所涉及的编程概念。 1. 局部变量与全局变量的关系: 当局部变量与全局变量同名时,局部变量会屏蔽全局变量。这意味着在函数内部,全局变量不可见,除非使用作用域解析运算符"::"来显式访问全局变量。局部变量只在其定义的代码块内有效,而全局变量在整个程序范围内都有效。 2. 引用全局变量: 要在其他文件中引用全局变量,通常有两种方法:一是通过包含定义全局变量的头文件;二是使用`extern`关键字。`extern`关键字表明变量是在其他地方定义的,不需要在这里分配空间,仅做声明。 3. 全局变量在头文件中的声明: 可以在头文件中定义全局变量,但为了避免命名冲突,可以使用`static`关键字,这将限制全局变量的作用域,使其只在定义它的源文件内有效。如果在多个文件中以非`static`方式声明同名全局变量,会导致链接错误。 4. `for(;1;)`循环: 这种循环与`while(1)`等价,表示一个无限循环,因为条件始终为真。 5. `do...while`与`while...do`的区别: `do...while`循环先执行一次循环体,然后检查条件,如果条件满足则继续循环,否则结束。`while...do`则先检查条件,条件满足才执行循环体,因此两者的主要区别在于是否首先进入循环。 6. C语言代码输出分析: 代码段中展示了预增操作`++`的使用。`a=10; b=a++;`这里的`b`会被赋值为10,因为`a++`是在赋值后增加;接着`c=++a;`中的`++a`是先增加`a`再赋值,所以`c`是11;`d=10*a++;`这里`d`会被赋值为100,因为`10*a`计算后`a`才增加,`a++`的增加不影响`d`的值。最后的输出是`b=10, c=11, d=120`。 7. 静态变量的特点: - `static`全局变量仅在其定义的源文件内可见,不污染全局命名空间,避免了不同源文件间同名全局变量的冲突。 - `static`局部变量在函数每次调用时保持其上次值,而不是像普通局部变量那样在每次调用时初始化。 - `static`函数意味着该函数的变量(局部变量)在函数调用之间保持其状态,且该函数不能被其他文件直接调用,增加了封装性。 这些面试题目考察了C语言的基础和深入理解,是成为一名合格的IT从业者所必备的知识。对这些概念的熟练掌握不仅能帮助通过面试,也能在实际开发工作中避免常见错误,提高代码质量。