c语言中static作用

(1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

  

#include "stdio.h"
int main () {
    int fac(int n);
    int i;
    for(i=1;i<=5;i++) {
        printf("%d!=%d\n",i,fac(i));
    }
    return 0;
}

int fac (int n ){
    static int f =1;
    f *= n;
    return f;
}

 我们通过这个例子可以看到static 作为静态存储在每次函数调用完毕并不释放。

 


 


(2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

为了说明这个问题我们需要理解extern 这个关键字。我们建立三个文件 main.c   a.c   b.c 三个文件。

  

#include "stdio.h"
int main () {
    extern int add(int a, int b);
    extern int sub(int a, int b);
    int a =5, b =3;
    printf("a+b的数值是 = %d\n",add(a,b));
    printf("a-b的数值是 = %d\n",sub(a,b)); 
    return 0;
}
int add (int a, int b ) {
return (a+b);
} 
int sub(int a, int b) {
    return a- b;
}

OK!我们看到这个小例子可以运行,如果我们将 add() 函数声明为 static int(int a, int b);  则会产生报错问题。 这样也就解释了第三个问题。

 

  
(3)不能被模块外其它函数访问。它是一个本地的全局变量。在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

转载于:https://www.cnblogs.com/causal360/p/4782859.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值