变量的分类

按照作用域:

  • 全局变量 所有代码块之外。
  • 局部变量 代码块之内。

按照存储方式:

  • 自动变量(auto变量) 定义该变量的函数被调用时才给它分配内存单元,开始它的生存期,函数调用结束,释放存储单元,结束生命周期。(注:系统不会对自动变量进行初始化赋值)
  • 静态变量 静态局部变量:在函数内定义,但是当函数退出后,静态局部变量始终还存在,其占用的内存单元不会被人释放,只有当程序结束时,随全局变量一起释放。静态全部变量:只能在该源文件中使用,不能在其他源文件中使用。
  • 寄存器变量 (register) 只是请求将变量存储在寄存器中,但不一定请求成功。

static修饰的变量:

static的总结
- static 修饰局部变量增加变量的生命周期。
- static 修饰全局变量或函数改变标识符的链接属性(由外部链接属性改为内部链接属性),即变量或者函数只可以在当前源文件中访问,不能在其它源文件中访问。

const定义的变量:

const和volatile的讲解
- 当const修饰一个标识符的时候,const修饰的变量依然是一个变量,只是不能被改,具有常属性。(注:不可以作为数组元素的个数)  从语义上讲,const修饰的变量是不期望被改的,所以编译器优化的时候把变量的值放入了寄存器中,即使我们通过地址改了变量的值,输出也不会改变。
- 若想保证内存的可见性在定义变量时应加上volatile关键字,这样通过地址改变量的值,输出也会随之改变。

猜你喜欢

转载自blog.csdn.net/zhao_miao/article/details/81265655