在c/c++中变量是最基本的成员,也是我们最常用的东西,变量大体上分为全局变量与局部变量两种,全局变量是在整个程序中都可以使用,而局部变量只能在最接近定义它的一组大括号内使用,总的来说,在c/c++里面,变量只有定义了并在其生命周期内才能使用。说得有点抽象,给大家看个例子吧。
a、全局变量
#include<iostream> using namespace std; int a = 0; void demo() { a++; } int main() { for(int i = 0; i < 5; i++) { demo(); cout << "a = " << a << endl; } return 0; }
输出结果如下
分析:我们可以看到,在程序一开始定义了a,然后我们在小demo()函数和main()主函数里面都使用了这个a,这个就是全局变量,同时也验证“变量只有定义了才能使用”,假如我们写成如下程序:
#include<iostream> using namespace std; void demo() { a++; } int a = 0; int main() { for(int i = 0; i < 5; i++) { demo(); cout << "a = " << a << endl; } return 0; }
编译出错,提示为:
C:\Users\Administrator\Desktop\Demo\demo.cpp(6) : error C2065: ‘a‘ : undeclared identifier
意思就是说程序不认识第六行里面的a,也就是demo()函数中“a++;”里的a,因为我们把a定义在了demo()函
数下面,我们还没定义a就在demo()函数里面使用a,编译器当然不认识喽。
b、局部变量
#include<iostream> using namespace std; void demo() { int a = 0; cout << "a = " << a << endl; } int main() { demo(); for(int i = 0; i < 1; i++) { int b = 1; cout << "b = " << b << endl; } return 0; }
运行结果如下
对比一下如下程序及程序编译结果
#include<iostream> using namespace std; void demo() { int a = 0; } int main() { demo(); for(int i = 0; i < 1; i++) { int b = 1; } cout << a << endl << b << endl; return 0; }
程序编译结果为:
C:\Users\Administrator\Desktop\Demo\demo.cpp(18) : error C2065: ‘a‘ : undeclared identifier
C:\Users\Administrator\Desktop\Demo\demo.cpp(18) : error C2065: ‘b‘ : undeclared identifier
意思就是说编译器不认识“cout << a << endl << b << endl;”这句话里的a和b变量
分析:图图之前说过,局部变量只能在最接近它定义的一组大括号里面使用,我们来看a,最接近定义变量a的一组大括号就是demo()函数的大括号,所以我们只能在demo()函数里面使用a,同样的,我们只能在for循环语句里面使用b。同时在看看我们一言以蔽我们变量作用域的一句话“变量只有定义了才能使用”,我们在demo()函数中定义了a,那么出了这个demo()大括号,它的生命周期就结束了,就会被系统销毁,a也就不存在了,既然不存在了,我们使用cout
<< a << endl << b << endl;编译器当然不认识a和b了。
请大家一定要记住“变量只有定义了,并在其生命周期内才能使用”
c/c++全局变量与局部变量