參考引用自:
雞啄米: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 */ |