C语言中的存储类别,作用域和生存周期

介绍

变量和函数都有两个属性:数据类型和存储类别,存储类别的不同则它们的作用域和生存期均有所差别

四种存储方式

auto

一般定义的变量没有直接默认为auto类型,函数执行时分配空间,函数结束时自动释放。

static

定义的变量在函数结束后不释放,对静态局部变量在编译时只赋值一次,第二次执行赋值语句时不再重新赋值,但是其他函数也无法使用该静态变量。编译时将变量分配在静态存储区。

extern

声明外部变量,外部变量即全局变量,它的作用域是从变量的定义出开始,到程序文件的结尾。编译时将变量分配在静态存储区。

register

如果有一些变量使用频繁,则每次存取变量的值需要花费很长一段时间,为提高执行效率,C语言允许将局部变量的值直接放在CPU的寄存器中.

作用域

局部变量

  1. 自动变量,动态局部变量,函数结束时变量将会被释放
  2. 静态局部变量,函数结束时变量被保存
  3. 寄存器变量,函数结束时变量将会被释放
  4. 形参可以定义为自动变量或寄存器变量

全局变量

  1. 静态外部变量,只能在本文件中使用
  2. 非静态外部变量,允许其他文件使用

生存期

动态存储

  1. 自动变量(在函数内有效)
  2. 寄存器变量(在函数内有效)
  3. 形参(在函数内有效)

静态存储

  1. 静态局部变量(在函数内有效)
  2. 静态外部变量(在文内有效)
  3. 外部变量(其他文件也可使用)

猜你喜欢

转载自blog.csdn.net/qq_45279570/article/details/109684002