华为C语言面试经典题目解析

需积分: 9 2 下载量 97 浏览量 更新于2024-07-24 收藏 287KB DOC 举报
局部变量变为静态后,它的作用域仅限于定义它的函数内,但生命周期延长至程序结束。这意味着即使函数执行完毕,静态局部变量的值也会保留,下次再次调用该函数时,它依然保持上次的值。这与普通局部变量在每次函数调用时都会初始化为默认值或指定值有所不同。 3) static函数与普通函数的主要区别在于,static函数在编译时就被链接到调用它的函数中,而不是在运行时。因此,static函数不能被其他文件直接调用,增加了函数的私有性,通常用于实现模块内部的逻辑,提高代码的安全性和封装性。而普通函数(非static)可以在程序的任何地方被调用,只要正确引入了相应的头文件。 回到题目中的问题: 1、局部变量与全局变量重名时,局部变量会遮蔽全局变量,即在当前作用域内,全局变量不可见,只能使用同名的局部变量。若想在函数内部访问全局变量,需使用作用域解析运算符`::`。 2、引用全局变量的方式有两种:一种是在包含该全局变量的头文件中通过`#include`来引用;另一种是使用`extern`关键字来声明全局变量,这种方式在编译期间不会报错,但如果变量未被正确定义,链接阶段会出错。 3、全局变量可以定义在被多个.C文件包含的头文件中,但为了避免命名冲突和链接错误,建议在一个源文件中对其进行初始化,并在其他文件中使用`extern`声明,或者使用`static`关键字使其在单个源文件中可见。 4、代码的输出内容如下: ```c b, c, d: 10, 12, 120 ``` 这里涉及到了自增运算符`++`的优先级问题。`a++`先返回a的值,然后a加1;`++a`则是先使a加1,然后返回新的值。因此,`b`保存了10,`c`保存了12,而`d`计算时a已经是12,所以乘以10得到120。 5、static全局变量与普通全局变量的区别在于作用域,前者仅在定义它的源文件内有效,后者在整个程序中有效。static局部变量与普通局部变量的区别在于生命周期,前者在函数调用结束后仍保留其值,后者在函数退出时销毁。static函数与普通函数的不同在于可见性,前者仅在定义它的源文件中可见,后者可以被程序的任何部分调用。