C语言Static详解

因为在很长一段时间里面一直在写面向对象的东西,比如用C#和Java来写东西,习惯了成员变量和成员函数。对static的了解仅限于他的生命期
在类中,而不是在对象,它为所有的类的对象所共享。但是在C语言里面他究竟有什么意思呢?
第一、静态局部变量(static)
众所周知,局部变量在进入该局部作用域时自动创建,离开时自动销毁,即所谓的块作用域。块作用域可以防止命名冲突,有助于帮助函数独立
化,但是有时候会有特别的需求,比如,统计一个递归函数递归调用了多少次。这个时候局部变量便会在每次进入函数的时候进行创建,根本不
能用作计数器。但是又不想使用全局变量,以免造成名字污染,这时候静态局部变量就派上用场了。静态局部变量的也是块作用域,但是他拥有
永久的存储单元,也就是说他可以再被函数本身访问到,如下代码,可以达到统计递归的次数:
#include <stdio.h>
int recu_times();
int main()
{
        printf("%d/n", recu_times());
}
int recu_times()
{
        static int cnt = 10;
        cnt--;
        if(cnt > 0)
                recu_times();
        return cnt;
}
静态局部变量始终有块作用域,所以他对其他的函数是不可见的。静态局部变量是对其他函数隐藏数据的地方,但是它会为将来同一个函数再调用
保留这些数据。
第二、静态全局变量(static)
当使用static声明全局变量的时候,static说明变量具有内部链接。首先需要理解一下,如果全局变量没有声明为static,则在其他文件中可以
通过extern声明来访问此变量,比如我在一个文件中定义了全局变量int i,我就可以在另外一个文件使用extern int i,来声明后就可以在另
外一个文件中访问变量i的值。如果定义了static之后,则无法再访问。
static的这种静态全局变量用来实现一种信息隐藏技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值