【09】全局(静态)变量,静态局部变量和局部变量的区别

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; //错i不存在

欢迎关注我的其它发布渠道