C语言中的变量——自动变量、寄存器变量、易失变量、外部变量和静态变量
参考链接:
C程序设计语言4.6、4.7节
UNIX环境高级编程 7.10节 函数setjmp和longjmp
https://blog.csdn.net/weixin_46309058/article/details/122042561
变量的存储类别分有自动(动态),静态,寄存器和外部四种。
auto 自动变量
static 静态存贮分配变量(又分为内部静态和外部静态)
extren 外部变量/全程变量(用于外部变量说明)
register 寄存器变量 (用于在硬件寄存器中)
四大类所有变量必须先说明(定义),后使用。
自动(动态)变量:
函数中的局部变量不加static关键字修饰就是动态变量。每次调用该函数的时,系统会给它分配存储空间,该函数调用结束释放其存储空间,及动态变量每次被调用都会被赋初值。
静态变量:
全局变量都是静态变量,函数中的局部变量加static关键字也是静态变量,格式为: static + 类型名 + 变量名 。多次调用该函数,只有第一次调用会赋初值,其余调用时,其值都是在上次调用该函数执行结束后的值。
外部变量:
在函数外部定义的变量即为外部变量,它的作用域是整个程序(全程变量)。
C程序可以分别放在几个文件上,每个文件可以作为一个编译单位分别进行编译。外部变量只需在某个文件上定义一次,其他文件若要引用此变量时,应用Extern加以说明(外部变量定义时不必加extern关键字)。
在同一文件中,若前面的函数要引用后面定义的外部(在函数之外)变量时,在函数里加extern加以说明。
引进外部变量的原因:解决函数单独编译的协调;与变量初始化有关;外部变量的值是永久的;解决数据共享;
注意:函数本身也被认为是外部变量
寄存器变量:
只有自动(局部)变量和函数参数才能进一步指定为寄存器存贮类
使用register变量可以提高存取速度,但寄存器变量的数目依赖于具体机器,声明多了也只有前几个有效。
只限于int,char,short,unsigned和指针类型用于寄存类。
不能对register变量取地址(即&操作)