局部变量

  • 存储在 中, 当作用域结束系统会自动释放 中的局部变量

    全局变量

  • 全局变量存储在 静态区 中, 他会随着程序的启动而创建, 随着程序的结束而结束

外部局部变量

  • 什么事外部全局变量?
    • 可以被其它文件访问的全局变量我们称之为外部全局变量。
  • 默认情况下所有的全局变量都是外部全局变量
  • 外部局部变量的特点

    • 可以定义同名的外部局部变量
    • 多个同名的外部全局变量指向同一块存储空间

      内部全局变量

  • 只要给全局变量加上 static 关键字就是内部全局变量

  • 只能被当前文件访问的全局变量我们称之为内部全局变量
  • 内部全局变量的特点
    • 多个同名的全局变量如果不在同一个文件中, 那么指向不同的存储空间

static 和 extern

  • extern:
    • 用于声明一个外部全局变量
    • 声明只需要在使用变量之前声明就可以了
      • 声明全局变量和声明函数一样, 仅仅是告诉系统我们有这个全局变量, 但并不会真在的开辟存储空间
  • static:
    • 用于定义一个内部全局变量

static 对局部变量的作用

  • static 修饰局部 变量

    • 会修改局部变量的生命周期
    • 将局部变量从栈转移到静态区中
  • 应用场景

    • 当某个方法的调用频率非常高, 而该方法中更有些变量的值是固定不变的;那么这个时候就可以使用static来修饰该变量, 让该变量只开辟一次存储空间 这样可以提高程序的效率和性能【比如:tableView的cell的复用的时候,定义一个静态变量 static 标识】。

static 和 extern 对函数的作用

extern

  • 只要在函数的返回值前面加上一个extern就可以让函数变为一个外部函数, 由于默认就是外部函数, 所以在开发中一般情况extern没人写
  • 如果extern写在函数的实现中, 代表定义一个外部函数
  • 如果extern写在函数的声明中, 代表声明一个外部函数

static

  • 只要在函数的返回值前面加上static就可以让函数变为内部函数, 其它文件就不能访问了
  • 如果static写在函数的实现中, 代表定义一个内部函数
  • 如果static写在函数的声明中, 代表声明一个内部函数

声明和定义的区别:

  • 声明不会开辟存储空间
  • 定义会开辟存储空间