全局变量和局部变量有没有区别,如果有,是什么?

一、变量的分类

       变量可以分为:全局变量、静态全局变量、静态局部变量和静态变量。

       按存储区域分,全局变量、静态全局变量、静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。

       按作用域分,全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但函数返回后失效。

       全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。

       全局变量是没有定义存储类型的外部变量,其作用域是从定义点到程序结束。省略了存储类型符,默认是自动型。

       静态全局变量是定义存储类型为静态型的外部变量,其作用域是从定义点到程序结束,所不同的是存储类型决定了存储地点,静态型变量是存放在内存的数据区中的,它们在程序开始运行前就分配了固定的字节,在程序运行过程中被分配的字节大小是不改变的。只有程序运行结束后,才释放所占用的内存。静态全局变量只本文件内可用。

       自动型变量存放在堆栈区中。堆栈区也是内存中的一部分,该部分内存在程序运行中是重复使用的。

二、介绍变量的作用域

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

关于局部变量的作用域还要说明以下几点:

        (1)主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用。同时,主函数中也不能使用其他函数中定义的变量。因为主函数也是一个函数,它与其他函数是平行关系。这一点与其它语言不同,应予以注意。

        (2)形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。

        (3)允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。

        (4)在复合语句中也可以定义变量,其作用域只在复合语句范围内。

       2、全局变量。全局变量也称为外部变量,它是在函数外部定义的变量。它不属于一个函数,它属于一个源程序文件,其总用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。但在一个函数之前定义的全局变量,在该函数内不可再加以说明。

对于全局变量还有以下几点说明:

         (1)对于全局变量的定义和说明,可以不加区分。而对于外部变量则不然,外部变量的定义和外部变量的说明并不是一回事。外部变量定义必须在所有函数之外,且只能定义一次。其一般形式为:

            [extern] 类型说明符 变量名,变量名...其中方括号内的extern可以省去不写。

            例如:int   a,b;

            等效于:

            extern int a,b;

        而外部变量说明出现在要使用该外部变量的各个函数内,在整个程序内,可能出现多次,外部变量说明的一般形式为:extern 类型说明符 变量名,变量名,...;外部变量在定义时就已分配了内存单元,外部变量定义可做初始赋值,外部变量说明不能再被赋初值,只是表明在函数内要使用某外部变量。

       (2)外部变量可加强函数模块之间的数据联系,但是又使函数要依赖这些变量,从模块化程序设计的观点来看这是不利的,因此不必要时尽量不要使用全局变量。

       (3)在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值