和自然办的事物一样,程序中的变量和对象等也有生存期,从产生到消亡。 生存期主要有两种,静态和动态。 1、静态生存期 某个对象的生存时间和程序运行期相同,我们就说它具有静态生存期。 很明显文件域的对象具有静态生存期。 使用块作用域具有静态生存期的方法,加static关键字修饰。 2、动态生存期 除开上面的静态生存期,其余对象具有动态生存期。具有动态生存期的对象产生于声明处,于对象作用域处结束。
<pre name="code" class="cpp">#include<iostream> using namespace std; int a=1; //全局变量,静态生存期 void fun(); int main() { static int x; //静态生存期,局部可见性,默认初始化为0 int y=10; cout<<"main:"<<endl; cout<<"a:"<<a<<" "<<"x:"<<x<<" "<<"y:"<<y<<endl; a=a+1; fun(); x=x+1; cout<<"main:"<<endl; cout<<"a:"<<a<<" "<<"x:"<<x<<" "<<"y:"<<y<<endl; fun(); return 0; } void fun() { static int x=2; //静态生存期,局部可见性,与主函数中的x无关 //x只在第一次进入函数时初始化,之后就延用最后调用的值 int y=3; //动态生存期 每次都初始化 y=y+3; a=a+2; x=x+10; cout<<"fun:"<<endl; cout<<"a:"<<a<<" "<<"x:"<<x<<" "<<"y:"<<y<<endl; } main: a:1 x:0 y:10 //a一直在变化,经main和fun累加 fun: a:4 x:12 y:6 main: a:4 x:1 y:10 //主函数x随主函数运算变化 fun: a:6 x:22 y:6 //fun函数x二次累加基于fun第一次的12 具有静态生存期和局部可见性 y值重新赋值计算
本文通过示例代码详细解释了程序中变量的静态生存期和动态生存期的概念。包括如何定义具有静态生存期的变量及其特点,以及动态生存期变量的作用范围和生命周期。
628

被折叠的 条评论
为什么被折叠?



