A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

CANGLONG_J_P

初级黑马

  • 黑马币:27

  • 帖子:9

  • 精华:0

© CANGLONG_J_P 初级黑马   /  2015-3-19 23:29  /  1027 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、变量的作用域
   C语言中所有变量都有自己的作用域,申明变量的类型不同,其作用域也不同。C语言中的变量,按照作用域的范围可分为两种, 即局部变量和全局变量。
1)局部变量。局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该 函数后再使用这种变量是非法的。
例如:
  
int f1(int a)  /*函数f1*/
  
{
int b,c;
  
...... }
  
int f2(int x)  /*函数f2*/
  
{
int y,z;;
  
...... }
  
f1内定义了三个变量,a为形参,b,c为一般 变量。在  f1的范围内a,b,c有效,或者说 a,b,c变量的作用域限于f1内。
  
f2内定义了三个变量,x为形参,y,z为一般 变量。在  f2的范围内x,y,z有效,或者说 x,y,z变量的作用域限于f2内。
关于局部变量的作用域还要说明以下几点:
(1)主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中 也不能使用其它函数中定义的变量。因为主函数也是一个函数,它与其它函数是平行关系。
(2)形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。
(3)允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。虽然允许在不同的函数中使用相同的变量名,但是为了使程序明了易懂,不提倡在不同的函数中使用相同的变量名。
2)全局变量
  
int a,b; /*外部变量*/ void f1() /*函数f1*/
  
{ ......
  
}
  
float x,y; /*外部变量*/ int fz() /*函数fz*/
  
{ ......
  
}
全局变量也称为外部变量,它是在函数外部定义的变量。
它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变 量,一般应作全局变量说明。只有在函数内经过说明的全局变量才能使用。
全局变量的说明符为extern。 但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。
例如:
从上例可以看出a、b、x、y 都是在函数外部定义的外部变量,都是全局变量。
对于全局变量还有以下几点说明:
(1)对于局部变量的定义和说明,可以不加区分。而对于外部变量则不然,外部变量的定义和外 部变量的说明并不是一回事。外部变量定义必须在所有的函数之外,且只能定义一次。 其一般形式为: [extern] 类型说明符 变量名,变量名... 其中方括号内的extern可以省去不写。
例如: int a,b; 等效于:
extern int a,b;
(2)而外部变量说明出现在要使用该外部变量的各个函数内,在整个程序内,可能出现多次,外部变量说明的一般形式为: extern 类型说明符 变量名,变量名,...; 外部变量在定义时就已 分配了内存单元,外部变量定义可作初始赋值,外部变量说明不能再赋初始值, 只是表明在函数 内要使用某外部变量。
(3)外部变量可加强函数模块之间的数据联系,但是又使函数要依赖这些变量,因而使得函数的 独立性降低。从模块化程序设计的观点来看这是不利的, 因此在不必要时尽量不要使用全局变 量。
(4)在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。


12 个回复

倒序浏览
总结的不错,赞一个
回复 使用道具 举报
还好吧。。加油!
回复 使用道具 举报
qianlongwuyong 来自手机 中级黑马 2015-3-20 07:23:33
板凳
可以呀,小伙
回复 使用道具 举报
局部的生命周期短于全局的
回复 使用道具 举报
总结的不错
回复 使用道具 举报
lyz0925 发表于 2015-3-20 00:27
总结的不错,赞一个

嘿嘿,以前在学校里都是玩,现在毕业了才知道C语言的重要性.
回复 使用道具 举报

嘿嘿,自己总结后感觉对变量更清晰了
回复 使用道具 举报
算是技术博客
回复 使用道具 举报
流转少年 来自手机 中级黑马 2015-3-22 00:12:03
10#
不错不错,顶一个!来自: iPhone客户端
回复 使用道具 举报
  当把一个变量声明在函数外面  这个变量就变成全局变量
当把一个变量声明在函数里面 这个变量就是局部变量
回复 使用道具 举报
总结得不错
回复 使用道具 举报
不错 加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马