C中的4个存储类关键字

C语言中变量的存储类别

 

从变量的作用域角度(空间)来分,可以分为全局变量局部变量

从变量的存在时间角度(生存期)来分,可以分为静态存储方式动态存储方式

内存中供用户使用的存储空间分为三部分:程序区静态存储区动态存储区

 

数据分别存放在静态存储区和动态存储区中

全局变量全部存放在静态存储区[d1] 中,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放。程序执行过程中它们占据固定的存储单元,而不是动态分配和释放

而在动态存储区中存放以下数据:

1.函数形式参数;

2.自动变量;

3.函数调用时的现场保存和返回地址。

数据在内存中的存储方法两类:静态存储类和动态存储类。

具体包含四种:

自动的(auto,

静态的(static,

寄存器的(register,

外部的(extern

auto : 函数中的局部变量称为自动变量。

static : 静态变量属于静态存储类别,在静态存储区内分配存储单元。在程序运行期间不释放。静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。若定义时不赋初值,编译时自动赋初值[d2] 而对自动变量[d3] ,如果不赋初值则它的值是不确定的

虽然静态局部变量在函数调用后依然存在,但其它函数是不能引用它的。

以下情况适合用静态局部变量:

1.需要保留函数上一次调用结束时的值。

2.如果初始化后,变量只被引用而不改变其值,则这时用静态局部变量比较方便,以免每次调用时重新赋值。

register : 寄存器变量是为了提高效率。因为寄存器的存取速度远高于内存的存取速度。

注意:

1.只有局部自动变量和形式参数可以作为寄存器变量。

2.不能定义任意多个寄存器变量,因为计算机系统中寄存器数目有限。

3.局部静态变量不能定义为寄存器变量,一个变量只能声明为一个存储类别

extern : 外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量的定义处开始,到本程序的末尾。编译时将外部变量分配在静态存储区

如果想在定义点之前引用外部变量,可以声明为extern以扩展作用域。用extern声明外部变量时,类型名可以省略。

在一个文件file1中定义了外部变量,而想在另一个文件file2中引用它,可以在另一个文件file2中对此外部变量进行extern声明。这样两个文件都可以引用这个外部变量。这是用extern将外部变量作用域扩展到其它文件中。

如果想使一个外部变量只在一个文件中使用,而不能被其它文件引用,可以在定义外部变量时加一个static声明[d4] 。这种只能用于本文件的外部变量(全局变量)成为静态外部变量。

声明部分出现的变量有两种情况:

一是需要建立存储空间的,称为定义性声明(如int a;);

二是不需要建立存储空间的,称为引用性声明(如extern a;)。

外部变量只能由一次定义,但可以多次声明。

static声明一个变量的作用有二:1.对局部变量用static声明,则为该变量分配的空间在整个程序执行期间始终存在;2.全局变量用static声明,则该变量的作用域只限于本文件。

 

内部函数:如果一个函数只能被本文件中其它函数所调用,它称为内部函数[d5] 。形如:static 类型标识符 函数名(形参表)

外部函数:如果此函数可以被其它文件调用,称为外部函数,

形如:extern 类型标识符 函数名(形参表)。在需要调用此函数的文件中,用extern声明所调函数是外部函数,形如:extern 函数名(实参表)。

 

 

全局变量由编译器建立且存放在内存的全局数据区,局部变量存放在栈区.


 [d1]因为不会丢失.

 [d2]比如int型默认值为0

 [d3]自动变量的值是随机的.

 [d4]static的这个作用限制变量只在这个文件中可以被使用.

 [d5]static限制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值