900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > C——自动变量(automatic variable) 静态变量(static variable)和寄存器变量(register variable)

C——自动变量(automatic variable) 静态变量(static variable)和寄存器变量(register variable)

时间:2020-08-17 14:04:00

相关推荐

C——自动变量(automatic variable) 静态变量(static variable)和寄存器变量(register variable)

在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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。