参考引用自:
鸡啄米:C++编程入门系列之十九(C++程序设计必知:生存期)
1、静态生存期
若某个对象它的生存期与程序的运行期相同,我们就说它具有静态生存期,就是说在程序运行期间它都不会释放。
a、具有文件作用域的对象都具有静态生存期。
b、使用关键字static修饰的变量,也就是静态变量具有静态生存期
2、动态生存期
具有动态生存期的对象产生于声明处,于该对象的作用域结束处释放。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#include<iostream>
using
namespace
std;
int
a = 1;
//a为全局变量,它具有静态生存期
void
fun(
void
);
int
main(){
static
int
x;
// 局部变量,具有静态生存期,可以叫做静态局部变量,局部可见。
int
y = 5;
// y,z为局部变量,具有动态生存期。
int
z = 1;
cout <<
"--MAIN---\n"
;
cout <<
"a:"
<< a <<
" x:"
<< x <<
" y:"
<< y <<
" z:"
<< z << endl;
z = z + 2;
fun();
cout <<
"---MAIN---\n"
;
cout <<
"a:"
<< a <<
" x:"
<< x <<
" y:"
<< y <<
" z:"
<< z << endl;
a = a + 10;
fun();
return
0;
}
void
fun(
void
){
static
int
x = 4;
// x,y为静态局部变量,具有全局寿命,局部可见。只有第一次进入函数时被初始化
static
int
y;
int
z = 10;
// z为局部变量,具有动态生存期,每次进入函数时都初始化。
a = a + 20;
x = x + 3;
z = z + 4;
cout <<
"---FUN---\n"
;
cout <<
"a:"
<< a <<
" x:"
<< x <<
" y:"
<< y <<
" z:"
<< z << endl;
y = x;
}
/*
--MAIN---
a:1 x:0 y:5 z:1
---FUN---
a:21 x:7 y:0 z:14
---MAIN---
a:21 x:0 y:5 z:3
---FUN---
a:51 x:10 y:7 z:14
*/
|