C语言 变量 存储区 作用域 生存期(extern static)

变量的生存期和作用域:

 

静态存储区

编译时,分配内存空间

执行中,内存单元一直保持,知道程序运行结束被释放

生存期,整个程序运行期

 

动态存储区

程序执行到所在的函数被调用时,系统才为其分配内存空间,函数调用结束,变量即被释放。

生存期,函数调用的时间

 

局部变量,全局变量

局部变量  存储在动态存储区   一个程序中既有全局变量又有局部变量  局部优先

全局变量  存储在静态存储区  从哪里开始定义 它的开始作用域就是哪里

 

若一个局部变量前面加了static  那么这个变量存储在静态存储区   

整个程序运行的时候都有用

 

存储类型

auto,register,static,extern四种存储类型

auto 

自动变量属于局部变量   有局部变量一切特点 

 

register  

寄存器类型直接把变量存储在CPU的通用寄存器   

通常变量要从内存中取出来再给运算器运算,但一些变量频繁使用  直接将它放入寄存器,运算器从寄存器中取数据快的很

所以  register 可以提高运行速度

 

static 静态类型

静态局部变量  存储在静态存储区 ,有全局特性,但只能被自己的函数使用,其他函数不能使用

静态全局变量 存储在静态存储区   和全局变量的区别是:限制了全局变量的作用域。静态全局变量只在定义改变量的源文件执行

上述两个的差别是:静态局部   限于自己的函数  静态全局  限于自己的文件

 

小结:

static 的理解:

  1static  申明的局部变量   存储在静态存储区。

         它在函数调用结束之后,不会被释放。它的值一直会保留下来。

  2静态局部变量语句只在初始化的时候执行一次,以后不再执行

  3在函数前面加static  说明这个函数不会在外部引用 只在本文件中引用   (这个与静态全局变量的作用相似)

可以说static 申明的局部变量具有隐藏作用

 

extern  外部类型

为什么引出外部类型:通常全局变量存放在静态存储区,生存期是固定的,存在于程序的整个运行过程,但是对于全局变量,它的作用域到底从哪里开始,到哪里结束。作用域整个文件范围,还是文件中的一部分范围?是一个文件中有效,还是在程序的所有文件中都有效?这就需指定不同的存储类别。

全局变量,作用域从变量的定义开始到本程序文件的末尾。在此作用区域局变量可以为程序中各个函数所引用。

但有时候,我们在一个文件中想用另一个文件中的全局变量,这时候需要扩展该全局变量的作用范围。

extern 外部变量声明,它表示把该外部变量作用于扩展到该位置,这个声明就说,从现在开始  这个声明过的变量就可以从这儿开始使用了使用了;

 

example:

file1.c

int num;

int main()

{

   num=5

   a=p();

  print(a)//

}

 

file2.c

extern num;(或者  extern int num)   将其他文件的全局变量的作用于扩展到本文件中

int p()

{

    return num*num;

}

 

上面这个例子仅仅是说明原理,print()函数大家使用的话 直接用pringf()这个函数去验证。

综上 extern  就是把一个全局变量的作用域扩展到了其他的文件

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值