全局变量

  • 定义在函数外部的变量是全局变量。
  • 全局变量具有全局的生存期和作用域
    • 全局变量与任何函数都无关
    • 在任何函数内部都可以使用全局变量
  • 不能使用变量给全局变量初始化
  • 不初始化的全局变量默认为NULL
  • 函数内的同名变量会隐藏全局变量
int a = 1;
{
    int a = 2;
    {
        int a = 3; 
        printf("%d\n",a);
    }
}

output: 3;

静态本地变量

  • 使用static修饰一个变量变量使其变成静态本地变量

  • 静态本地变量可以理解为特殊的全局变量(生存期相同,内存区域相同,作用域不同)

  • 静态本地变量具有全局生存期,但作用域为局部作用域

    • static的意思是局部作用域(本地可访问)

eg:

#include<stdio.h>

int f(void);

int main(){
    f();
    f();
    return 0;
}

int f(void){
    int var = 1;
    static int static_var = 1;
    var++;
    static_var++;
    printf("var => %d\nstatic_var => %d\n",var,static_var);
}

output:

var => 2
static_var => 2
var => 2
static_var => 3

返回指针的函数

  • 返回函数内本地变量的指针是危险的,离开此函数后,谁也无法保证这片内存空间会不会分配给别人。

  • 返回全局或者静态本地变量是安全的,他们和函数无关。

  • 返回在函数内malloc的内存是安全的,但是容易出问题,不推荐。

  • 返回传入函数的指针是安全的。


尽量避免使用全局变量

最后修改:2023 年 04 月 28 日
如果觉得我的文章对你有用,请随意赞赏