zoukankan      html  css  js  c++  java
  • 【转】全局变量、静态全局变量、静态局部变量和普通局部变量的区别

    原文链接:https://blog.csdn.net/qq_39736982/article/details/82685277

    按存储区域分:

    1、全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区

    2、局部变量存放在内存的栈区


    按作用域分:  

    1、全局变量在整个工程文件内都有效;

    2、静态全局变量只在定义它的文件内有效;

    3、静态局部变量只在定义它的函数内有效,且程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。
    4、全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。

    5、静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变量与局部变量在存储位置上不同,使得其存在的时限也不同,导致对这两者操作 的运行结果也不同。


    #include <stdio.h>
     
    void func();//函数声明,主要是因为被调用的函数定义写在了main函数后面了
     
    int n = 1; //全局变量
     
    int  main(void)
    {
        static int a; // 静态局部变量,但静态局部变量只在定义它的函数中可见,并且只初始化一次
        int b = -10; // 局部变量
     
        printf("main:   a=%d,   b=%d,   n=%d
    ",a,b,n);
     
        b += 4;
     
        func();
     
        printf("main:   a=%d,   b=%d,   n=%d
    ",a,b,n);
        n += 10;
     
        func();
        printf("main:   a=%d,   b=%d,   n=%d
    ",a,b,n);
     
    }
    void func()
    {
        static int a = 2; // 静态局部变量
        int b = 5; // 局部变量
        a += 2;
        n += 12;
        b += 5;
       printf("func:   a=%d,   b=%d,   n=%d
    ",a,b,n);
    }
    

      

    运行结果: 

     

     结果分析:

     首先明确main函数和func函数里面都有静态局部变量a和局部变量b,由于它们的固有性质,它们都只在定义它的函数里有效,所以它们互不干扰,所以只要在本函数里分析即可,而全局变量n,在main和func函数里都有效,所以分析它的值应该考虑n在这两个函数里的变化

  • 相关阅读:
    ubuntu 制做samba
    《Programming WPF》翻译 第4章 前言
    《Programming WPF》翻译 第4章 3.绑定到数据列表
    《Programming WPF》翻译 第4章 4.数据源
    《Programming WPF》翻译 第5章 6.触发器
    《Programming WPF》翻译 第4章 2.数据绑定
    《Programming WPF》翻译 第4章 1.不使用数据绑定
    《Programming WPF》翻译 第5章 7.控件模板
    《Programming WPF》翻译 第5章 8.我们进行到哪里了?
    《Programming WPF》翻译 第5章 5.数据模板和样式
  • 原文地址:https://www.cnblogs.com/chenshao/p/12572316.html
Copyright © 2011-2022 走看看