全局变量和static的变量有什么不同啊

不是都是可以在全局使用的变量?

阅读 3k
3 个回答

全局 和 局部 是 变量 的定义域,
static 是 变量 的 存活期,
两个不同的概念~

函数里定义的static变量是属于函数,不能再外部访问,而定义一个全局变量只是在特定函数里访问的话代码的可读性和可维护性不好,例如:

#include <stdio.h>
int counter(){
    static int c = 0;
    return c++;
}
int main(){
    printf("%d\n",counter());
    printf("%d\n",counter());
} 

全局变量

指的是定义在文件全局作用域的变量,简单来讲就是函数外面,作用域是整个程序,生存期是从程序开始到结束

// a.c
int g_var1; // 全局变量,其他文件内可以访问到

static int g_var2; // 其他文件不可以访问到
// b.c
extern int g_var1;
void f(void)
{
    //使用变量 g_var1
}

static变量

就是使用static声明的变量

// c.c
extern int g_var2; // 尝试引用其他文件的全局变量

void f2(void)
{
    static int s_var1; // static变量
    // ... 使用 s_var1
    
    s_var1 = g_var2; // !! 错误,g_var2只在a.c里可用
}

static使用

  • 加在全局变量上使全局变量变成了文件内全局变量,其他文件不可见

  • 加在函数作用域的自动变量上就会将变量的生存期从函数开始到结束改变为从程序开始到结束

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进