• C语言变量的作用域


    目录

    一、局部变量 

    示例 

    运行效果

    二、全局变量

     示例

    运行效果

    注意事项

    运行效果

    三、形式参数

    举个栗子

    运行效果

    全局变量与局部变量在内存中的区别

    四、初始化局部变量和全局变量


    作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量:

    1. 在函数或块内部的局部变量
    2. 在所有函数外部的全局变量
    3. 形式参数的函数参数定义中

    一、局部变量 

    1. 在某个函数或语句块的内部声明的变量称为局部变量,它们只能在该函数或语句块内部的语句使用
    2. 局部变量在函数或语句块外部是不可用的
    3. 局部变量在函数返回或语句块结束时由系统收回内存空间

    示例 

    test39.c

    1. #include
    2. int main ()
    3. {
    4. // 局部变量声明
    5. int a, b, c;
    6. // 初始化
    7. a = 3;
    8. b = 5;
    9. c = a + b;
    10. printf ("a = %d, b = %d and c = %d\n", a, b, c);
    11. return 0;
    12. }

    运行效果

    二、全局变量

    1. 全局变量是定义在函数外部,通常是在程序的顶部(其它地方也可以)。全局变量在整个程序生命周期内都是有效的,在定义位置之后的任意函数中都能访问
    2. 全局变量在主程序退出时由系统收回内存空间

     示例

    test40.c

    1. #include
    2. // 全局变量声明
    3. int g;
    4. int main ()
    5. {
    6. // 局部变量声明
    7. int a, b;
    8. // 初始化
    9. a = 3;
    10. b = 5;
    11. g = a + b;
    12. printf ("a = %d, b = %d and g = %d\n", a, b, g);
    13. return 0;
    14. }

    运行效果

    注意事项

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

    test41.c 

    1. #include
    2. double d=3.14; // 全局变量声明
    3. void func1(); // 声明一个自定义函数
    4. int main()
    5. {
    6. printf("位置一 d=%lf\n",d);
    7. func1();
    8. printf("位置二 d=%lf\n",d);
    9. }
    10. void func1()
    11. {
    12. double d=3.1415; // 局部变量的声明
    13. printf("位置三 d=%lf\n",d);
    14. }

    在 test41.c 中,定义了全局变量 d,在func1()函数中,定义了局部变量 d,func1()函数运行的时候,会使用自己的局部变量d,不会使用全局变量d,所以main函数中位置二输出d的值是3.14

    运行效果

    再举一个简单的栗子 test42.c

    1. #include
    2. // 全局变量声明
    3. int g = 3;
    4. int main ()
    5. {
    6. // 局部变量声明
    7. int g = 5;
    8. //局部变量名与全局变量名相同,就会屏蔽全局变量而使用局部变量
    9. printf ("g = %d\n", g);// g 等于 5
    10. return 0;
    11. }

    三、形式参数

    函数的参数,形式参数,被当作该函数内的局部变量,如果与全局变量同名它们会优先使用

    举个栗子

    test43.c

    1. #include
    2. // 全局变量声明
    3. int a = 3;
    4. int main ()
    5. {
    6. // 在主函数中的局部变量声明
    7. int a = 5;
    8. int b = 8;
    9. int c = 0;
    10. int sum(int, int); //函数的声明
    11. printf ("a = %d\n", a);
    12. c = sum( a, b);
    13. printf ("c = %d\n", c);
    14. return 0;
    15. }
    16. // 函数的定义
    17. int sum(int a, int b)
    18. {
    19. printf ("a = %d\n", a);
    20. printf ("b = %d\n", b);
    21. return a + b;
    22. }

    运行效果

    全局变量与局部变量在内存中的区别

    • 全局变量保存在内存的全局存储区中,占用静态的存储单元
    • 局部变量保存在中,只有在所在函数被调用时动态地为变量分配存储单元

    四、初始化局部变量和全局变量

    1. 局部变量被定义时,系统不会对其初始化,您必须自行对其初始化
    2. 定义全局变量时,系统会自动对其初始化,如下所示:
    数据类型初始化默认值
    int(整形)0
    char(字符型)'\0'
    float(单精度浮点型)0
    double(双精度浮点型)0
    pointer (指针)下期介绍NULL

    本期的内容到这里就结束了,下期再见!

  • 相关阅读:
    自定义类型:结构体(二)位段实现
    vue3+ts项目创建 使用npm create vue@latest
    STM32G4系列之DAC
    Day2--使用ESP32双核、U8G2 OLED任务、任务以绝对频率运行、任务内存优化
    Spring Boot 中的 ApplicationRunner 和 CommandLineRunner
    为了带你搞懂 RPC,我们手写了一个 RPC 框架
    【C++】指针与引用(学习笔记)
    mindspore中使用LeNet脚本训练时出现报错
    【历史上的今天】6 月 28 日:马斯克诞生;微软推出 Office 365;蔡氏电路的发明者出生
    kdeplot()核密度估计图的介绍
  • 原文地址:https://blog.csdn.net/XiaoQiu__/article/details/126510238