zoukankan      html  css  js  c++  java
  • C语言学习--全局变量、静态本地变量

    全局变量

    • 全局变量

    定义在函数外面的变量是全局变量

    全局变量具有全局的生存期和作用域

    它们与任何函数无关

    任何函数内部都可以使用它们

    #include <stdio.h>
    int f(void);
    int gAll = 12;
    int main()
    {
        printf("gAll in %s function is %d
    ",__func__,gAll);   //注意:__func__是输出是哪个函数,下划线是两个连着一起 
        f();
        printf("gAll again in %s function is %d
    ",__func__,gAll);    
        return 0;
    }
    int f()
    {
        printf("gAll in %s function is %d
    ",__func__,gAll);
        gAll += 2;
        printf("gAll again in %s function is %d
    ",__func__,gAll);
        return gAll;
    }

    •  全局变量的初始化

    没有做初始化的全局变量会得到0值

    指针会得到NULL值

    只能用编译时刻已知的值来初始化全局变量

    它们的初始化发生在main函数之前

    • 被隐藏的全局变量  

          如果函数内部存在与全局变量同名的变量,则全局变量被隐藏。

    静态本地变量

      在本地变量定义时加上static修饰符就变成静态本地变量

      在函数离开的时候静态本来变量会继续存在并保持其值

      静态本地变量的初始化只有第一次进入这个函数的时候做,以后进入这个函数保持上次离开时的值

      静态本地变量实际上是特殊的全局变量

    它们位于相同的内存区域

    静态本地变量具有全局的生存期,函数内部的局部作用域。

    static在这里的意思是局部作用域(本地可以访问)

    还回指针的函数

    返回本地变量的地址是危险的

    返回全局变量或静态本地变量的地址是安全的

    返回在函数内malloc的内存是安全的,但是容易造成问题

    最好的做法是返回传入的指针

    tips

    不要使用全局变量来在函数间传递参数和结果

    尽量避免使用全局变量

    使用全局变量和静态本地变量的函数是线程不安全的

    The End

    Thank you !

  • 相关阅读:
    二维树状数组的区间加减及查询 tyvj 1716 上帝造题的七分钟
    hdu5399
    WebLogicSSL解决苹果IOS itms下载问题
    怎样封装RESTful Web Service
    ie8下面版本号(包含ie8)的浏览器不支持html5标签属性解决方式(Modernizr 2.6.2插件的使用)
    在Linux平台使用VNC连接树莓派
    合作开发——设计阶段
    HDU-1165-Eddy&#39;s research II
    Iocomp控件教程之LinearGauge--线性刻度尺控件
    VB中的排序问题 15个
  • 原文地址:https://www.cnblogs.com/netcn/p/4419889.html
Copyright © 2011-2022 走看看