局部变量,全局变量,静态变量_chris

局部变量

func()

{

int a;

int b=0;

}

很多书籍中也叫自动变量,它声明在函数块内,作用范围也在函数块内。 不能被同一源文件的其他函数使用,也不能被其他文件中的函数使用。

局部变量存储在栈中。无论局部变量显示初始化(如b),或者未初始化(如a),都只有当定义它们的程序块被调用时(即执行时),才分配空间,声明或定义时并不分配,局部变量不是可执行模块的一部分!!除非显示地对局部变量进行初始化,否则,它们的初始值是不确定的。

全局变量

int a;

int b=0;

func()

{

}

全局变量没有声明在任何一个函数内,作用范围在程序运行始终存在。

能被同一源文件的任何函数使用,也能被其他文件中的函数使用,但要使用extern关键字。

全局变量存储在数据段中。全局变量显示初始化时(如b),或者未初始化时(如a),在程序映像中有不同的分区:已初始化的全局变量是可执行模块的一部分。未初始化的全局变量则不是可执行模块的一部分,只有当定义它们的程序被调用时(即执行时),才分配空间,声明或定义时并不分配。未初始化的全局变量在运行时被初始化为0。

静态变量

用static关键字定义的变量,与局部变量相比, static局部变量有三点不同:
1. 存储空间分配不同
auto类型分配在栈上,属于动态存储类别,占动态存储区空间,函数调用结束后自动释放, 而static分配在静态存储区,在程序整个运行期间都不释放,两者之间的作用域相同,但生存期不同。
2. static局部变量在所处模块在初次运行时进行初始化工作,且只操作一次。
3. 对于局部静态变量,如果不赋初值,编译期会自动赋初值0或空字符,而auto类型的初值是不确定的。(对于C++中的class对象例外, class的对象实例如果不初始化, 则会自动调用默认构造函数, 不管是否是static类型)

静态全局变量用来表示不能被其它文件访问的全局变量和函数。为了限制全局变量/函数的作用域,函数或变量前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。注意:对于外部(全局)变量,不论是否有static限制,它的存储区域都是在静态存储区,生存期都是全局的。此时的static只是起作用域限制作用,限定作用域在本模块(文件)内部。

静态全局变量与全局变量的差别是:静态全局变量只能被同一源文件中的函数调用,其他文件中的函数不能调用静态全局变量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值