C变量存储类型

c语言共4种存储类型,分别为auto,register,extern和static

局部变量(local variable)

只有变量才具有自动存储周期。一个函数的局部变量(函数的形参或者函数体中声明的变量)通常属于自动存储周期。关键字auto用于显示的声明具有自动存储周期的变量。例如:

auto double x, y;

由于局部变量在默认情况下都被认为是自动存储周期,所以auto常被省略掉。自动存储变量是一种节约内存的手段,只有在需要它们的时候才占用内存,只有在定义它们的函数中才会被创建,而调用一旦返回它们立即被删除。

寄存器变量(register variable)

当程序被翻译成机器语言时,数据通常都是被装入寄存器后再对其进行计算或者其他处理。register存储类型说明符可放在自动变量的声明语句前,例如:

register int count = 100;

register存储类型说明符用于建议编译器将这个变量驻留在一个计算机硬件内部可高速访问的寄存器中。当然,编译器在编译时也可能忽略register的声明,例如,在没有足够多的寄存器来存储程序中寄存器变量中的时候。关键字register只可以用于自动存储的变量中。(register常常是多余的,因为编译器一般已经具有了很好的优化功能,会自动找出频繁访问的变量,并将其驻留在寄存器中,而无须程序员的register声明)

静态存储类(static storage class)

关键字extern和static用于声明具有静态存储周期的变量名和函数名。静态存储周期从函数运行时就有效。对于静态变量,它占用的存储单元是在程序运行时进行分配和初始化的,而且只分配和初始化一次。对于函数,函数名从程序运行的开始时刻就有效。但是有效并不意味在任何地方都可以访问到,存储周期和作用域是两个不同的概念。
具有静态存储周期的标识符分为两类:外部标识符(全局变量和函数名)和用static声明的局部变量。默认情况下,全局变量和函数名都属于外部存储类extern。将一个变量声明为全局变量方法是将其声明语句写在任何一个函数体之外,全局变量在程序运行期间始终存在。全局变量和函数名可以被程序之中位于他们的声明或定义语句之后的任何函数所访问。static声明的局部变量仍只在定义的函数中可以被访问到,但是与局部变量不同,静态的局部变量在函数执行完之后仍然保留。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值