c语言的存储类

c语言有五种不同类型的存储类,了解他们会十分有助于对c语言的理解程度。


描述c语言的存储类有作用域,链接类型以及存储时期三种描述方法。


作用域是用来描述变量的可以引用的区域的一个概念,一般情况下使用的都是代码块作用域,就是在一块代码的{}内部有用的区域,还有一种叫做文件作用域,就是从他开始定义的地方开始到文件结束的地方都有用,这一般叫做全局变量。


链接类型有两种,一种是内链接,一种是外联结,还有空链接。具有代码块作用域的叫做空链接,具有文件作用域的一般有内链接或者外链接,一个有外链接的可以在任何一个文件里边引用,一个有内链接的可以仅仅在当前文件里边引用,标识内链接的用关键字static。


存储时期是表示一个变量会在程序运行的什么时候存在的概念,有静态存储时期和动态存储时期两种,一般的代码块作用域都是动态存储时期,全局变量是静态存储时期,static标识着她是一个内链接而不是静态存储区域,这一点要注意。比如一个标识了static文件作用域变量具有内链接,没有static标识是具有外链接,但是无论有没有static关键字,都代表静态存储时期。动态存储时期代表着,进入这个代码块的时候,这个变量会被初始化,但是结束这个代码块的时候就会把这个内存快释放。静态内存块代表着在程序运行的整个时间这个变量都会存在。


而存储类有五种,分别是自动,寄存器,具有外部链接的静态存储类,具有内部连接的存储类,空链接的静态类。


自动类型的存储类,拥有代码块作用域,自动存储时期,空链接。一般用aoto标识,但是没有的话,默认是aoto。如果在一个代码块里边有一个和外部的变量同名的变量的话,就会覆盖外部的变量。


寄存器变量是用register标示符来标识的,有代码块作用域,空链接,自动存储时期。寄存器是存在cpu内的硬件设施,可以供cpu更快的访问,如果一个变量经常的访问的话,可以设置为寄存器变量,但是这仅仅是一种请求,编译器会根据当前的cpu以及内存情况来采取措施。


具有空链接的静态变量,也称为具有代码块作用域的静态变量,这就代表着,这个变量仅仅在这个代码块内部可以被访问到,但是存储时期确实静态的,在整个程序内都会存在。
例如以下代码:
void test()
{
static int a  =0;
a++;
printf("%d",a);
}
int main()
{
test();
test();
return 0;
}


就会输出:
01


具有外部链接的静态变量,代表这个变量具有静态存储时间,并且有外部链接,可以被任何文件使用,具有文件作用域。一般默认初始化为0。在其他文件使用的时候需要声明extern int a;才可以。


具有内部连接的静态变量是具有静态存储时期,但是只能在单个文件内可以使用。就是在外部用static声明的全局变量而已。


同时,函数也有静态的概念,在文件里定义的函数可以被外部文件使用,但是加上了static关键字以后就会仅仅会被当前文件使用了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值