01-局部变量、全局变量、static、extern

2016-04-12  本文已影响85人  Giurlo

1 局部变量


2 全局变量


全局变量分为两种:


2.1-外部全局变量: 默认情况下所有的全局变量都是外部全局变量

什么是外部全局变量? 可以被其它文件访问的全局变量我们称之为外部全局变量

外部全局变量有一个特点: 可以定义同名的外部全局变量; 多个同名的外部全局变量指向同一块存储空间

extern: 用于声明一个外部全局变量,

声明只需要在使用变量之前声明就可以了,

extern关键字用来修饰全局变量, 代表声明一个全局变量

注意: 声明全局变量和声明函数一样, 仅仅是告诉系统我们有这个全局变量, 但并不会真在的开辟存储空间

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

什么是内部全局变量? 只能被当前文件访问的全局变量我们称之为内部全局变量

内部全局变量有一个特点: 也可以定义多个同名的内部全局变量; 多个同名的全局变量如果不在同一个文件中, 那么指向不同的存储空间

static: 用于定义一个内部全局变量

为了提高数据的安全性, 不让别人在其它文件中修改我们的全局变量, C语言提供了另外一个用于修改全局变量的关键字——static, 只要用static修改的全局变量就是内部全局变量, 只能在当前文件中使用, 这样就可以提高我们全局变量的安全性

如果多个文件中存在同名的内部全局变量, 相互不会影响

如果既有外部全局变量也有内部全局变量, 那么会优先访问内部全局变量

extern: 用于声明一个外部全局变量

static: 用于定义一个内部全局变量

声明和定义的区别: 声明不会开辟存储空间, 定义会开辟存储空间

3 static来修饰局部变量


当使用static来修饰局部变量, 那么会延长局部变量的生命周期, 并且会更改局部变量存储的位置 , 将局部变量从栈转移到静态区中

只要使用static修改局部变量之后, 当执行到定义局部变量的代码就会分配存储空间, 但是只有程序结束才会释放该存储空间

应用场景:当某个方法的调用频率非常高, 而该方法中更有些变量的值是固定不变的, 那么这个时候就可以使用static来修饰该变量, 让该变量只开辟一次存储空间, 这样可以提高程序的效率和性能

4 extern和static对函数的作用


函数也分为内部函数和外部函数, 默认情况下所有的函数都是外部函数

外部函数: 可以被其它文件访问的函数称之为外部函数

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

内部函数: 只能在当前文件中访问的函数称之为内部函数

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

声明内部函数一般用于内部函数定义在后面, 而想在定义之前使用内部函数

上一篇 下一篇

猜你喜欢

热点阅读