qey

Atitude is Everything.-- 关注C/C++,关注Linux(Unix) ,关注网络。 Better Late Than Never.
随笔 - 4, 文章 - 13, 评论 - 7, 引用 - 0
数据加载中……

变量作用域问题--清华讲义例子

变量作用域问题:

#include<iostream.h> 
int i=1// i 为全局变量,具有静态生存期。 
int main()   
static int a;// 静态局部变量,有全局寿命,局部可见。 
  int b=-10// b, c为局部变量,具有动态生存期。 
  int c=0
  
void other(void); 
  cout
<<"---MAIN---\n"
  cout
<<" i: "<<i<<" a: "<<a<<" b: "<<b<<" c: "<<c<<endl; 
  c
=c+8;  other(); 
  cout
<<"---MAIN---\n"
  cout
<<" i: "<<i<<" a: "<<a<<" b: "<<b<<" c: "<<c<<endl; 
 i
=i+10; other();  
}

void other(void

  
static int a=2
  
static int b; 
   
// a,b为静态局部变量,具有全局寿命,局部可见。 
   
//只第一次进入函数时被初始化。 
  int c=10// C为局部变量,具有动态生存期, 
            
//每次进入函数时都初始化。 
  a=a+2; i=i+32; c=c+5
  cout
<<"---OTHER---\n"
  cout
<<" i: "<<i<<" a: "<<a<<" b: "<<b<<" c: "<<c<<endl; 
 b
=a; 
}


运行结果:
---MAIN---
 i: 1 a: 0 b: -10 c: 0
---OTHER---
 i: 33 a: 4 b: 0 c: 15
---MAIN---
 i: 33 a: 0 b: -10 c: 8
---OTHER---
 i: 75 a: 6 b: 4 c: 15

 

posted on 2006-04-08 11:56 无声无色 阅读(333) 评论(2)  编辑 收藏 引用

评论

# re: 变量作用域问题--清华讲义例子  回复  更多评论   

细细看它各个变量的寿命域和可见域,有一定启示!
2006-04-08 12:10 | 无声无色

# re: 变量作用域问题--清华讲义例子  回复  更多评论   

static 定义的int静态变量在没有赋值时,系统自动赋值0;other函数里,作为静态局部变量a,b,具有全局寿命,局部可见,但是只在第一次进入函数时被初始化。出了other函数之后,函数里面的静态局部变量a,b不可见。当第二次调用other函数时,不初始化,都是用第一次调用other函数之后得到的a,b的值。

但是我还是不明白它们的物理上的存贮是怎么样的?难道同样是静态变量a,它们在物理的存储空间不同吗??
2006-04-08 12:59 | 无声无色

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