在C语言中,变量有三种类型:自动变量(automatic variable)、静态变量(static variable)和寄存器变量(register variable),他们大部分地方都是相似的,但是每个都有各自的特性。
自动变量(automatic variable):
这是最常用的变量,声明和初始化格式类似int a = 0;。如果不初始化,它的值是未定义的初始值。每次函数调用的时候,也就是重新进入该变量的作用域的时候,变量会重新初始化。而且自动变量的初始化并不被限定为常数,而是可以包含任何式子——先前定义的值,甚至是调用函数。此外,自动变量的名称可以和外部变量或者函数的名称重复,这时候会隐藏外部变量或者函数(不推荐重复名称来使用,这样会导致混乱或者恶性bug)。
静态变量(static variable):
静态变量和自动变量很像,声明和初始化的格式类似static int a = 0;。如果不初始化,它的值是0。不同之处是它的值是永久存储的,而不会随着函数再次调用而再次初始化;而且静态变量初始化必须是一个常数式。
寄存器变量(register variable):
这种变量一般用于程序中某个变量被重度使用,为了提升性能。声明格式类似register int a;。如果不初始化,它的值是未定义的初始值。而且寄存器变量和自动变量一样,初始化并不被限定为常数,而是可以包含任何式子:先前定义的值,甚至是调用函数。如果使用这种类型的变量,会将变量放入寄存器中,由于存储层级关系,这样会提升性能。但是受限于基础设备限制,只有少数变量能被放入寄存器,放不下全部的。并且需要注意的是:1. register声明只能声明自动变量和函数的参数。2. 编译器可以自由忽略我们标注的register,只将其当作自动变量来处理。3. 无法获取寄存器中变量的地址。4. 寄存器变量的数字和类型的限制取决于机器。
此外,需要注意
- 只有纯量变量(scalar variable)可以在定义的时候初始化。
纯量变量(scalar variable)被用于表示单独且固定大小的数据对象,例如整数、浮点数、字符串和布尔值。
- 如果定义一个数组,不论使用哪种变量,数组中少的元素都会用
0补齐。例如s[3] = {1 , 2},我们定义她有三个元素,但是实际上我们只给了两个值,这个时候第三个元素就是0。
本文介绍了C语言中的三种变量类型:自动变量、静态变量和寄存器变量。自动变量在每次函数调用时重新初始化,而静态变量则保持其值。寄存器变量用于提高性能,但受硬件限制。所有变量初始化可包含任意式子,数组未初始化的元素默认为0。
、静态变量(static variable)和寄存器变量(register variable)&spm=1001.2101.3001.5002&articleId=121908135&d=1&t=3&u=d91dca9a684a4931a516f06d1950382d)

被折叠的 条评论
为什么被折叠?



