• 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 !

  • 相关阅读:
    操盘策略:判断强庄股的四个诀窍
    三类股有望继续走强
    操盘策略:股市空头陷阱五大招数
    每日一招:面对亏损我们应该如何操作(鳄鱼法则)
    (转)一个大户的自白:我是这样被两融打爆的
    3.2、迭代
    3.1、切片
    2.4、递归函数
    2.3、函数的参数
    2.2、定义函数
  • 原文地址:https://www.cnblogs.com/netcn/p/4419889.html
Copyright © 2020-2023  润新知