在C语言或者C++经常需要定义许多的变量,既然定义了一个变量,那么该变量就肯定有一个作用范围(存活周期)。在C语言或C++中允许在不同的作用范围中拥有相同名字的变量。变量按照作用范围一般分为全局变量和局部变量。在函数内定义的一般为局部变量,在函数外定义的一般为全局变量。被“{}”圈住的变量则只在其中起作用,例如以下程序:
#include <iostream>
using namespace std;
int main(){
int i = 1; //此处i为main函数中的局部变量,在整个main函数中有效
cout << i << endl; //输出结果为1
{
int i = 2; //此处i为‘{}’中的局部变量只在其中有效
cout << i << endl; //输出局部变量i为2
{
i++; //此处i++针对局部变量i
cout <<i << endl; //输出为3
}
cout << i <<endl; //仍然输出为3,上一行改变了局部变量i的值
}
cout << i << endl; //“{}”结束,局部变量i凋亡,此处输出全局变量i的值1
return 0;
}
输出结果:
同样地如果在子函数中定义的变量在main函数中将无法调用;在main函数中定义的变量,子函数也无法调用。例如:
#include <iostream>
using namespace std;
void f(){
int i = 3;
cout << j; //产生编译错误,j为main函数中的变量
cout << i << endl;
} //函数f结束,变量i随即凋亡
int main(){
int j = 3;
cout << j;
cout << i; //产生编译错误,i为子函数中的局部变量,main中无法调用
}
如果变量定义在函数体外,则为全局变量,在整个文件中均有效,如:
#include <iostream>
using namespace std;
int n = 5; //全局变量,在以下所用函数中有效
void f(){
cout << n << endl; //合法
}
int main(){
cout << n + 1 << endl; //合法,输出6
f(); //输出5
}
输出结果如下:
子函数如果在main函数中被多次调用,则其中定义的变量将被定义,消亡,第二次调用时重新被定义,例如:
#include <iostream>
using namespace std;
void f(){
int j = 5;
cout << j << endl; //合法
j++;
}
int main(){
f(); //输出为5
f(); //输出仍然为5,第二次调用时,j是被第二次定义的,同时被赋值为5
f(); //输出仍然为5
}
如果想要上面程序中j的值在函数f被调用后不凋亡,而是等到下次调用时再继续使用,那么就需要用到关键词static修饰,将该变量定义为静态变量,其表示:该变量是静态变量,函数结束后不会凋亡,等函数下次再被调用时,继续以该值使用,例如:
#include <iostream>
using namespace std;
void f(){
static int j = 5;
cout << j << endl;
j++; //此处j自增后保留供下次调用时使用
}
int main(){
f(); //输出5
f(); //输出6
f(); //输出7
}
如有错误,欢迎大家批评与指正!