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

本文介绍了C语言中的三种变量类型:自动变量、静态变量和寄存器变量。自动变量在每次函数调用时重新初始化,而静态变量则保持其值。寄存器变量用于提高性能,但受硬件限制。所有变量初始化可包含任意式子,数组未初始化的元素默认为0。

在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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhonguncle

请我喝一瓶可乐吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值