1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include<iostream> using namespace std; void func(); int n=1; int main() { int a=0, b=10; cout<<"a="<<a<<", b="<<b<<", n="<<n<<endl; func(); cout<<"a="<<a<<", b="<<b<<", n="<<n<<endl; func(); } void func() { static int a=2; int b=5; a += 2, b += 5; n +=12; cout<<"a="<<a<<", b="<<b<<", n="<<n<<endl; }
|
程序中函数main两次调用了func函数,从运行结果可以看出,程序控制每次进入func函数时,局部变量b都被重新初始化,而静态局部变量a仅在第一次调用时被初始化,第二次进入该函数时,不再进行初始化,这时它的值是第―次调用后的结果值4。main函数中的变量a和b与func函数中的变量a和b的空间位置是不样的,所以相应的值也不一样。
国内一些学生在用VC6,但VC6的编译器不是标准C++规范它规定for循环中定义的循环变量的作用域为包含for语句的快,即沿用C规则,而标准C++规定在for中的循环变量作用域为for语句块。即:
1 2 3 4
| int sum=0; for(int i=0; i<10; i++) sum += i; cout<<sum<<" "<<i<<endl;
|