随笔 - 56, 文章 - 0, 评论 - 0, 引用 - 0
数据加载中……

全局变量、static存储类别变量、extern型外部变量



下述程序中使用了全局变量以及具有static存储类别的变量
 1#include<iostream>
 2using namespace std;
 3int i=5;
 4void func(void);
 5int main()
 6{
 7    static int a;
 8    int b=-22;
 9    int c=0;
10    cout<<"-------main-------"<<endl;
11    cout<<"i="<<i<<","<<"a="<<a<<","
12        <<"b="<<b<<","<<"c="<<c<<endl;
13    c=c+10;
14    func();
15    cout<<"------main()------"<<endl;
16    cout<<"i="<<i<<","<<"a="<<a<<","
17        <<"b="<<b<<","<<"c="<<c<<endl;
18    i=i+12;
19    func();
20    return 0;
21}

22void func(void)
23{
24    static int a=3;
25    static int b;
26    int c=10;
27    a=a+2;
28    i=i+21;
29    c=c+6;
30    cout<<"------func()------"<<endl;
31    cout<<"i="<<i<<","<<"a="<<a<<","
32        <<"b="<<b<<","<<"c="<<c<<endl;
33    b=a;
34}

35
运行结果为:
------main()------
i
=5,a=0,b=-22,c=0
------func()------
i
=26,a=5,b=0,c=16
------main()------
i
=26,a=0,b=-22,c=10
------func()------
i
=59,a=7,b=5,c=16
结果分析:
静态(static)局部变量与自动(auto)局部变量的使用区别:它们的作用域都是局部的,作用域外都是不可见的;但静态局部变量在
其作用域外仍是存在的(尚且"活着",其存储单元中的值并不被破坏,仍可在下次进入作用域后接着用!即具有全局变量取值
"连续性"的特征),而自动局部变量在其作用域外则不复存在(已经"死亡",其存储单元已经被系统回收!当然不可接着使用该
变量的原有值,下次进入该作用域后重新分配存储空间)。另外注意:静态变量仅在首次"遇到"时分配存储空间并进行初始化
(若没显式提供初始化值时,系统自动将其初始化为系统隐含值,即将数值量初始化为0,将字符量初始化为空格)。


 1#include<iostream>
 2#include"median.cpp"
 3using namespace std;
 4int i=1111;
 5char ch='+';
 6void func1();
 7void func2();
 8
 9int main()
10{
11    func1();
12    cout<<"file1_main:i,ch=>"<<i<<","<<ch<<endl;
13    func2();
14    cout<<"file2_main:i,ch=>"<<i<<","<<ch<<endl;
15    return 0;
16}

17
18void func1()
19{
20    cout<<"file1_func1:i,ch=>"<<i<<","<<ch<<endl;
21    i=2222;
22    ch='-';
23}

24
25//extern型外部变量的使用"median.cpp"//
26#include<iostream>
27using namespace std;
28extern int i;
29extern char ch;
30void func2()
31{
32    cout<<"file2_func2:i,ch=>"<<i<<","<<ch<<endl;
33    i=3333;
34    ch='*';
35}

36
运行结果:
file1_func1:i,ch=>1111,+
file1_main:i,ch
=>2222,-
file2_func2:i,ch
=>2222,-
file2_main:i,ch
=>3333,*
分析:
外部变量的使用,可以使得在不同的源程序文件之间进行变量值的相互传递。
通过extern关键字来对外部变量进行说明,系统仅在其中某一个文件的外部变量定义处为其分配存储空间,而在
其他文件中则不再分配,但与定义处的那一同名变量共享同一存储空间,以达到多文件之间变量值相互传递的目的。

posted on 2009-08-17 00:28 八路 阅读(988) 评论(0)  编辑 收藏 引用 所属分类: 学习笔记


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理