• C语言变量的作用域


    一、变量的作用域

    作用域是程序中定义的变量存在(或生效)的区域,超过该区域变量就不能被访问。C语言中有四种地方可以定义变量。

    1)在所有函数外部定义的是全局变量。

    2)在头文件中定义的是全局变量。

    3)在函数或语句块内部定义的是局部变量。

    4)函数的参数是该函数的局部变量。

    顺便解释一下,函数的声明和函数的定义是两个概念,但是,变量的定义和变量的声明是同一概念,或定义变量和声明变量也行,取决于程序员的表达习惯。

    二、全局变量

    全局变量是定义在函数外部,通常是在程序的顶部(其它地方也可以)。全局变量在整个程序生命周期内都是有效的,在定义位置之后的任意函数中都能访问。

    全局变量在主程序退出时由系统收回内存空间。

    示例(book37.c)

    /*
     * 程序名:book37.c,此程序用于演示全局变量的作用域
     * 作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h> 
    
    double pi=3.141592; // 全局变量声明
    
    void func1(); // 声明一个自定义函数
    
    int main() 
    { 
      printf("位置一 pi=%f
    ",pi);
      func1();
      printf("位置二 pi=%f
    ",pi);
    }
    
    void func1()
    {
      printf("位置三 pi=%f
    ",pi);
      pi=3.141593;  // 改变pi的值
      printf("位置四 pi=%f
    ",pi);
    }
    

    在上面的代码中,pi为全局变量,定义在main()和func1()之外,位于程序的顶部,在main()和func1()函数中都可以访问它。

    运行效果

    在这里插入图片描述

    三、局部变量

    在某个函数或语句块的内部声明的变量称为局部变量,它们只能在该函数或语句块内部的语句使用。

    局部变量在函数或语句块外部是不可用的。

    局部变量在函数返回或语句块结束时由系统收回内存空间。

    四、函数的参数

    函数的参数被当作该函数内的局部变量。

    建议各位再阅读《C语言函数》的” 九、函数参数的传递”章节。

    五、注意事项

    局部变量和全局变量的名称可以相同,在某函数或语句块内部,如果局部变量名与全局变量名相同,就会屏蔽全局变量而使用局部变量。

    示例(book39.c)

    /*
     * 程序名:book39.c,此程序演示局部变量与全局变量重名的情况.
     * 作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h> 
    
    double pi=3.141592; // 全局变量声明
    
    void func1(); // 声明一个自定义函数
    
    int main() 
    { 
      printf("位置一 pi=%f
    ",pi);
      func1();
      printf("位置二 pi=%f
    ",pi);
    }
    
    void func1()
    {
      double pi=3.141593; // 全局变量声明
      printf("位置三 pi=%f
    ",pi);
    }
    

    在以上的代码中,定义了全局变量pi,在func1()函数中,定义了局部变量pi,func1()函数运行的时候,会使用自己的局部变量pi,不会使用全局变量pi,所以main函数中位置二输出pi的值是仍然3.141592。

    运行效果

    在这里插入图片描述

    六、课后作业

    编写示例程序,把本章节介绍的知识点全部演示一遍,用程序演示可以加深您的理解和映象。

    七、版权声明

    C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
    来源:C语言技术网(www.freecplus.net)
    作者:码农有道

    如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!

  • 相关阅读:
    uoj311 【UNR #2】积劳成疾
    SQL中MAX()和MIN()函数的使用(比较字符串的大小)
    SQL Server 怎样生成序列号(虚拟数字辅助表)
    如何使用引用类型来改变变量的值
    C#获取当前主机硬件信息
    JS扫雷原理性代码
    Struts2文件的上传和下载实现
    Struts2拦截器详解
    Struts2拦截器配置和使用
    Struts2转换器配置和用法
  • 原文地址:https://www.cnblogs.com/wucongzhou/p/12498939.html
Copyright © 2020-2023  润新知