变量作用域

0. 全局变量


  • 形式:定义在 函数, 代码块, 函数形参列表 的变量
  • 特点:如果 没有 进行初始化, 那么系统默认会将全局变量初始化为 0
  • 位置:存储在 静态区 中,随着程序的 启动 而创建,随着程序的 结束结束
  • 分类
    1. 外部全局变量
       (1) 概念:可以 被其它文件 访问 的全局变量, 默认情况下所有的全局变量都是外部全局变量
       (2) 特点:可以定义多个同名的外部全局变量, 且多个同名的外部全局变量指向同一块存储空间
       (3) 作用域:从 定义的那一行 开始, 直到 程序结束
       (4) extern:用于声明一个外部全局变量
    
    2. 内部全局变量
       (1) 概念:只能被当前文件访问的全局变量, 只要给全局变量加上 static 关键字就是内部全局变量
       (2) 特点:可以定义多个同名的内部全局变量;
                多个同名的内部全局变量如果不在同一个文件中, 那么指向不同的存储空间
       (3) 作用域:从 定义的那一行 开始, 直到 文件末尾
    

1. 局部变量


  • 形式:定义在 函数, 代码块, 函数形参列表 的变量
  • 特点:如果 没有 进行初始化, 那么局部变量中是一些 随机 的值
  • 位置:存储在 中, 当作用域结束系统会 自动释放 栈中的局部变量
    int main() {
      int num = 10;
      { 
        int num = 66;
        printf("num = %i\n", num);
      }
      return 0;
    }
    
  • static 修饰局部变量
    1. 位置:存储在 静态区 中
    2. 作用域:从 定义的那一行 开始,直到程序结束
    
    void test(void);
    int main() {
      int num = 10;
      printf("&num = %p\n", &num);
      test();
      test();
      return 0;
    }
    void test() {
      static int value = 100;
      printf("&value = %p\n", &value);
    }
    

你可能感兴趣的:(变量作用域)