c语言中的静态全局变量和全局变量以及静态局部变量和局部变量

注意,这里只讨论静态全局变量全局变量,不涉及静态局部变量局部变量

在c语言的开发工作中,我们可能会遇到,需要某个变量,但是这个变量只能在当前源文件中具有全局性,而对于源程序的其他源文件来说不可引用。想想如何定义呢?我们可能一下就想到了全局变量,但仔细一想,它过于满足要求了,对于源程序的其他源文件都是可用的。好吧,再搜索一下知识库,在全局变量前加个关键字static呢?静态全局变量,哈哈,正好满足!

需要我们搞清楚静态全局变量全局变量之间的相同点与不同点。

我们先看一下这两者之间的相同点:

  • 存储方式:全局变量和静态全局变量,都采用的是静态存储方式。

不同点:

  • 作用域:全局变量,整个源程序的所有源文件。静态全局变量,仅在定义该变量的源文件内可使用,而在同一源程序的其他源文件中不可被引用使用。

小结

静态全局变量相对于全局变量而言,在整个源程序中,对非定义此静态全局变量的源文件具有隐藏与隔离的作用,所以,可以在c语言有模块化程序设计需求的开发中使用。

注意,下面只讨论静态局部变量局部变量,不涉及静态全局变量全局变量。

上面聊的好像过于少了,那就顺便聊一下静态局部变量吧。

什么是静态局部变量呢?

简单的说,如果你明白局部变量的定义,那么将局部变量前再加一个关键字 static ,这个局部变量就变成静态局部变量了。

        将关键字 static 加之于局部变量之上后,该局部变量的存储位置就发生了质的变化,从在栈中存放改变为在静态存储区存放了。在 c 语言程序中,静态局部变量是在编译时赋初值的,且只赋初值一次,在程序运行时它已有初值(如果不指定初始值,则默认初始值为0)。如若在函数中定义了静态局部变量,此静态局部变量在编译时被赋初始值,程序运行时它已有初值,运行后在每次调用函数时不会再被重新赋初值,而是保留上次函数调用结束时的值。

对于函数中定义的局部变量,每调用一次函数,函数中的局部变量就会被重新初始化一次。

通过上面的描述,静态局部变量一般的使用场景就很明确了。

        再说一下可见性,相对于局部变量,其可见性并不会发生变化,仍旧只在其被声明的代码块中是可见。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值