zoukankan      html  css  js  c++  java
  • c语言中static作用

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

      

    #include "stdio.h"
    int main () {
        int fac(int n);
        int i;
        for(i=1;i<=5;i++) {
            printf("%d!=%d
    ",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
    ",add(a,b));
        printf("a-b的数值是 = %d
    ",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)不能被模块外其它函数访问。它是一个本地的全局变量。在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

  • 相关阅读:
    上篇用到的matcher函数
    lambdaj学习
    Redis高级应用——2
    Redis入门
    从gitee 下载代码到本地
    CSS中对图片(background)的一些设置心得总结
    nodejs 安装Ionic 和cordova
    Spring MVC内容协商机制详解
    基于Servlet3.0的编程式SpringMVC实例详解
    基于Junit的Spring集成测试方法
  • 原文地址:https://www.cnblogs.com/causal360/p/4782859.html
Copyright © 2011-2022 走看看