"C++经典笔试题,包括局部变量与全局变量的关系、全局变量的声明与使用、以及static修饰符对变量和函数的影响。"
在C++编程中,局部变量和全局变量是两种不同作用域的变量。全局变量在整个源程序中都是可见的,而局部变量仅在其定义的函数或代码块内部可见。当局部变量与全局变量同名时,局部变量会屏蔽全局变量,即在函数内部访问到的是局部变量。若要在函数内部访问全局变量,可以使用作用域解析运算符"::"。
全局变量可以在头文件中定义,但为了避免命名冲突,通常建议使用`static`关键字声明为静态全局变量。静态全局变量的生命周期始于程序开始,止于程序结束,但其作用域仅限于定义它的源文件。在多个源文件中定义同名的静态全局变量是允许的,只要只有一个文件对其进行初始化,否则会导致链接错误。
局部变量的`static`修饰符改变其存储类别,使其在函数调用结束后仍保持其值,而不是像普通局部变量那样被销毁。这种情况下,每次调用该函数,静态局部变量的值都会保留,而非重新初始化。这使得静态局部变量在函数多次调用中充当持久状态的变量。
对于函数,`static`修饰符也有类似的效果。静态函数的作用域仅限于定义它的源文件,不允许其他文件通过`#include`来访问。这样的函数称为内部链接函数,增强了模块化,并且可以避免名字冲突。静态函数不能被外部函数直接调用,增加了函数的封装性。
在给定的代码示例中:
```cpp
#include<stdio.h>
int main(void)
{
int a, b, c, d;
a = 10;
b = a++; // b = 10
c = ++a; // a becomes 11, c = 11
d = 10 * a++; // d = 10 * 11 = 110, a becomes 12
printf("b,c,d:%d,%d,%d", b, c, d);
return 0;
}
```
程序的输出将是:`b,c,d:10,11,110`。这里展示了自增操作(`++`)的前缀和后缀形式对变量值的影响。
总结来说,C++中的`static`关键字用于控制变量的作用域和生存期,以及函数的可见性。理解这些概念对于解决C++笔试题至关重要,因为它们涉及到程序内存管理、作用域规则以及代码的组织和封装。在面试和笔试中,对这些知识点的熟练掌握能够帮助开发者更好地理解和编写高质量的C++代码。