Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1411937
  • 博文数量: 143
  • 博客积分: 10005
  • 博客等级: 上将
  • 技术积分: 1535
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-23 17:25
个人简介

淡泊明志 宁静致远

文章分类

全部博文(143)

文章存档

2011年(2)

2009年(1)

2007年(22)

2006年(118)

我的朋友

分类: C/C++

2007-05-21 14:36:37

【我解C语言面试题系列】002 局部变量和全局变量小结?

局部变量和全局变量小结

 

局部变量 

局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。

局部变量从存储方式上可分为动态(auto)存储类型和静态(static)存储类型。

动态存储类型的局部变量都是动态的分配存储空间,数据存储在动态存储区(栈)中。函数调用结束后自动释放,生存期是在声明该变量的函数执行过程。

静态存储类型的局部变量则是静态的分配存储空间,数据存储在静态存储区中。在程序整个运行期间都不释放,生存期贯穿于程序运行的整个过程。

函数中的局部变量,如不专门声明为static存储类别,默认都是动态地分配存储空间的,我们在平时的声明变量的过程中auto都是默认省略的。

全局变量

全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放;

如果外部变量不在文件的开头定义,其有效作用域只限于定义处到文件终

如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。其有效作用域就被拓展到从这个文件extern声明处到文件结束

如果在全局变量声明的时候,前面加上关键字static,那么其他文件就不能再访问和使用该变量,其有效作用域只限于定义处到文件终

 

局部变量能否和全局变量重名

       局部变量能和全局变量重名,但是局部变量会屏蔽全局变量。在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。

PS这对extern声明的全局变量也一样

阅读(4172) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

ammana_babi2008-05-04 09:06:08

俺一般较多使用的是Dev C++ 4.9.9.2,你可以试试这个的了。

chinaunix网友2008-05-02 20:04:12

我想问一下,在VC6.0下面好象编译器不支持局部变量能否和全局变量重名 ,而且也不支持for(int i=0;i<10;i++)这种表达方式,能否推荐一个比较支持C99标准的编译器