C语言存储类型

转载地址:https://blog.csdn.net/claroja/article/details/79496652

c中的每一个变量和函数都有两个属性:类型(type)和存储类型(storage class).存储类型分别是auto(自动),extern(外部),register(寄存器),static(静态) 
1.auto 
在函数体中定义的变量缺省是auto. 
当进入代码块(block)时,系统为自动变量分配内存.在块内,这些变量被定义,并被认为他们是局部于本块的.当退出块时,系统释放分配给自动变量的内存,因此,变量值就丢失了.重新进入块,系统会为自动变量再次分配内存,原先的值已经没有了. 
2.extern 
在函数的外部声明变量,就为变量永久的分配存储,它的存储类型是extern. 
定义在函数外部的变量的存储类型都是extern,既不使用关键字extern. 
使用extern关键字是告诉,编译器”在本文件或其他文件中寻找它”.既a文件中int a =1在b文件中则可以使用extern int a;来调用它. 
外部变量从不会消失,因为外部变量在整个程序执行期间都是存在的. 
两种方式向函数传递信息:1.使用外部变量.2.使用参数.当函数从其内部而不是通过参数表改变全局变量时,会产生副作用.这样的构造容易引发错误.正确的做法是通过参数和返回机制影响全局变量.

3.register 
register高速编译器应该把有关的变量存储在高速的内存寄存器中.使用存储于类型register是要试图改善执行速度.当关系速度时,可选择一些最经常访问的变量,并把他们的存储类型声明为register. 
register i;等价于register int i;,register默认是int类型.

4.static 
1.允许局部变量保存它的原有值,以便再进入块时使用.

void f(void)
{
    static int cnt = 0;
}

当第一次调用函数时,把变量cnt初始化为0,在退出函数时,cnt的值被保存在内存中.当再次调用函数时,就不用再对cnt进行初始化,cnt扔保留着上次调用函数时的值. 
2.在函数外部声明static,则次变量是本文件可访问(私有privacy),外部文件不能访问.
--------------------- 
作者:Claroja 
来源:CSDN 
原文:https://blog.csdn.net/claroja/article/details/79496652 
版权声明:本文为博主原创文章,转载请附上博文链接!

发布了74 篇原创文章 · 获赞 27 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_37507976/article/details/89099474