精华内容
下载资源
问答
  • C语言 | static静态变量

    2021-02-19 09:15:02
    例87:学习C语言static定义静态变量的用法。 解题思路:在C语言中,static 不仅可以用来修饰变量,还可以用来修饰函数,使用 static 修饰的变量,称为静态变量静态变量的存储方式与全局变量一样,都是静态存储方式...

    例87:学习C语言static定义静态变量的用法。

    解题思路:在C语言中,static 不仅可以用来修饰变量,还可以用来修饰函数,使用 static 修饰的变量,称为静态变量。静态变量的存储方式与全局变量一样,都是静态存储方式。

    C语言源代码演示:

    #include<stdio.h>//头文件 
    int main()//主函数 
    {
      void varfunc(); //函数声明 
      int i;//定义整型变量 
      for(i=0;i<3;i++)//3次循环 
      {
        varfunc();//调用varfunc函数 
      }
      return 0;//主函数返回值为0 
    }
    
    void varfunc() 
    {
      int var=0;//定义整型变量 
      static int static_var=0; //定义静态变量 
      printf("变量var值是:%d\n",var);
      printf("静态变量static_var值是:%d\n",static_var);
      printf("\n");//换行 
      var++;
      static_var++;
    }
    

    编译运行结果:

    变量var值是:0
    静态变量static_var值是:0
    
    变量var值是:0
    静态变量static_var值是:1
    
    变量var值是:0
    静态变量static_var值是:2
    
    --------------------------------
    Process exited after 1.12 seconds with return value 0
    请按任意键继续. . .
    

    读者需要注意的一点是:静态变量属于静态存储方式,属于静态存储方式的变量却不一定就是静态变量。

    以上,如果你看了觉得对你有所帮助,就给小林点个赞,分享给身边的人叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~

    C语言开发工具

    更多案例可以go公众号:C语言入门到静通

    展开全文
  • C语言 static静态变量的作用 static c语言的变量种类 静态变量通过关键字 static 进行声明,该变量存储在数据段上,也就是内存上,可以改变变量的作用域和生命周期。 对于局部变量作用域依旧没有改变,...

    C语言 static静态变量的作用

    static 

     

    c语言的变量种类

     

    c语言的变量种类

     

    1. 静态变量通过关键字 static 进行声明,该变量存储在数据段上,也就是内存上,可以改变变量的作用域和生命周期。
    2. 对于局部变量作用域依旧没有改变,只有定义该局部变量的函数和复合语句可以引用,但是其生命周期变成了直到整个源程序文件结束。
    3. 对于全局变量生命周期没有发生变化,但是其作用域反而有所减小,只有本文件的函数可以引用该全局变量。
    4. 针对static的特性,只有本文件内的函数可以引用该变量,在C语言中一个源程序文件就是一个模块,一个源程序文件(模块)声明了一个static全局变量之后其他模块只能通过该模块提供的接口函数来访问这个static变量,而不能直接实现对其进行操作,也就是说static可以实现一个模块的封装。

    范例:
    建立一个链表文件公司工资文件,tax.c:

    1. #include<stdio.h> 
    2.  
    3. static int base = 10000; //基本的工资基数 
    4.  
    5. int chicken_legs(float i){ 
    6. return (1 + i)*base; 

    建立一个向外界提供一个接口函数声明,tax.h:

    1. extern int chicken_legs(float i); 

    如其他源文件user.c需要引用该文件,使用接口文件:

    1. #include<stdio.h> 
    2. #include"tax.h" 
    3.  
    4. int main(void){ 
    5. int wage; 
    6. float increase; 
    7. wage = chicken_legs(increase); 
    8. return 0; 

    user.c这个文件就不能修改tax.c中的用static声明的 base,而只能引用接口函数,static 关键字使文件中的全局变量的范围局限于该文件中,从而起到一个封装文件的作用

    展开全文
  • C语言 static静态变量

    2018-01-01 17:43:00
    静态变量类型说明符是static静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不...
    静态变量类型说明符是static。
    
    静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直
    占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直 到整个程序运行结束。静态变量虽在程序的整个执行过程中始终存在,
    但是在它作用域之外不能使用。 另外,属于静态存储方式的量不一定就是静态变量。 例如:外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,
    或称静态全局变量。 所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。 静态变量可以在任何可以申请的地方申请,一旦申请成功后,它将不再接受其他的同样申请。 静态变量并不是说其就不能改变值,不能改变值的量叫常量。 其拥有的值是可变的 ,而且它会保持最新的值。说其静态,
    是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。
    一、静态局部变量:
    
    1、 Static类内部变量是某个特定函数的局部变量,即只能在定义该变量的函数内使用该变量,它不管其所在的函数是否被调用,都将一直存在;
    不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。换言之,
    Static类型的内部变量是一种只能在某个特定函数中使用,但一直占据存储空间的变量。
    2、函数体内如果在定义静态变量的同时进行了初始化,则以后程序不再进行初始化操作(出现在函数内部的基本类型的的静态变量初始化语句只有在第一次调用才执行)。
    而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
    3、静态局部变量的初始化表达式必须是一个常量或者常量表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);
    静态变量的初始值为0。
    4、当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,
    因此仍以采用局部静态变量为宜。 注:局部静态变量占用内存时间较长,并且可读性差,因此,除非必要,尽量避免使用局部静态变量。
    二、静态全局变量
    
    全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
    全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。
    这两者在存储方式上并无不同。
        
    这两者的区别虽在于:
    1、非静态全局变量的作用域是整个源程序 ,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的2静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件(即声明(extern)了该变量的CPP文件,或包含该变量声明头文件的CPP文件)中不能使用它。
        
    由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
        
    从以上分析可以看出————
    把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。
    把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。
    
    因此static这个说明符在不同的地方所起的作用是不同的。应予以注意。
    
    关于Static关键字 
    1.静态变量,分配在静态存储区,在数据段中。函数退出之后,变量值不变。
    2.作用域,全局的静态变量、静态函数只能在本文件中使用。(不同于一般全局变量)
    局部的静态变量同函数的局部变量
    注意点:
    1)、static静态变量会被放在程序的全局存储区中(即在程序的全局数据区,而不是在堆栈中分配,所以不会导致堆栈溢出),
    这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
    2)、static静态变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。——有信息隐蔽的作用。
    (外部的 Static声明亦可用于声明函数。如果将函数声明为Static类型,则该函数名除了对该函数声明所在的文件可见外,其他文件均无法访问
    --static修饰函数一般放在.c或者.cpp文件中,.h文件一般用于对外提供接口3)、若全局变量仅在单个C文件中访问,则可将此变量改为静态全局变量,以降低模块间的耦合度; 若全局变量仅由单个函数访问,则可将此变量改为该函数的静态局部变量,以降低模块间的耦合度。 4)、设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题。 所谓"可重入"(也可以说是可预测的),即:只要输入数据相同就应产生相同的输出。 函数中使用了static变量,因为static变量的特征,这样的函数被称为:带“内部存储器”功能的的函数。 如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量,这种函数中的static变量,使用原则是,能不用尽量不用。  当然,有些时候,在函数中是必须要使用static变量的,比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为局部变量,则返回为错指针。

     

    转载于:https://www.cnblogs.com/zhanggaofeng/p/8168029.html

    展开全文
  • C语言static静态变量

    2016-03-06 10:41:17
    静态变量的类型 说明符是static静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。 例如外部变量虽属于静态 存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态...
    1. static 变量

    静态变量的类型 说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。 例如外部变量虽属于静态 存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。

    2. 静态局部变量
    静态局部变量属于静态存储方式,它具有以下特点:
    (1)静态局部变量在函数内定义 它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。

    (2)允许对构造类静态局部量赋初值 例如数组,若未赋以初值,则由系统自动赋以0值。
    (3)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以 看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的 值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成 意外的副作用,因此仍以采用局部静态变量为宜。

    3.静态全局变量
    全局变量(外部变量)的说明之前再冠以static 就构 成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局 变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在 定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此 可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量 后是改变了它的作用域, 限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。

    4. static 函数…..

    内部函数和外部函数

    当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。
    1 内部函数(又称静态函数)
    如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。
    定义一个内部函数,只需在函数类型前再加一个“static”关键字即可,如下所示:
    static 函数类型 函数名(函数参数表)
    {……}
    关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。
    使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。

    2 外部函数
    外部函数的定义:在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数:
    [extern] 函数类型 函数名(函数参数表)
    {……}
    调用外部函数时,需要对其进行说明:
    [extern] 函数类型 函数名(参数类型表)[,函数名2(参数类型表2)……];

    [案例]外部函数应用。
    (1)文件mainf.c
    main()
    { extern void input(…),process(…),output(…);
    input(…); process(…); output(…);
    }

    (2)文件subf1.c
    ……
    extern void input(……) /*定义外部函数*/
    {……}
    (3)文件subf2.c
    ……
    extern void process(……) /*定义外部 函数*/
    {……}
    (4)文件subf3.c
    ……
    extern void output(……) /*定义外部函数*/
    {……}


    1、概述

      static 声明的变量在C语言中有两方面的特征:

      1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。  2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。

      2、问题:Static的理解

      关于static变量,请选择下面所有说法正确的内容:

      A、若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;

      B、若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;

      C、设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;

      D、静态全局变量过大,可那会导致堆栈溢出。

      答案与分析:

      对于A,B:根据本篇概述部分的说明b),我们知道,A,B都是正确的。

      对于C:根据本篇概述部分的说明a),我们知道,C是正确的(所谓的函数重入问题,下面会详细阐述)。

      对于D:静态变量放在程序的全局数据区,而不是在堆栈中分配,所以不可能导致堆栈溢出,D是错误的。

      因此,答案是A、B、C。

      3、问题:不可重入函数

      曾经设计过如下一个函数,在代码检视的时候被提醒有bug,因为这个函数是不可重入的,为什么?

    unsigned int sum_int( unsigned int base )
    {
     unsigned int index;
     static unsigned int sum = 0; // 注意,是static类型的。
     for (index = 1; index <= base; index++)
     {
      sum += index;
     }
     return sum;
    }

      答案与分析:

      所谓的函数是可重入的(也可以说是可预测的),即:只要输入数据相同就应产生相同的输出。

      这个函数之所以是不可预测的,就是因为函数中使用了static变量,因为static变量的特征,这样的函数被称为:带“内部存储器”功能的的函数。因此如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量,这种函数中的static变量,使用原则是,能不用尽量不用。

      将上面的函数修改为可重入的函数很简单,只要将声明sum变量中的static关键字去掉,变量sum即变为一个auto 类型的变量,函数即变为一个可重入的函数。

      当然,有些时候,在函数中是必须要使用static变量的,比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。


    原文地址:http://www.cnblogs.com/sideandside/archive/2007/03/29/692559.html

    展开全文
  • 如何区分const char*p 和char* const p? 画一条垂直线穿过上述指针声明的星号位置,如果const出现在线的左边,指针指向的...static 静态变量  静态变量和全局变量都储存在一个叫静态存储区的内存区域内。静态存储区与
  • c语言static变量详解详情请见 详情请见 https://www.cnblogs.com/heyonggang/p/3198431.html
  • static静态变量的使用 1.全局静态变量 在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。 1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在) 2)初始化:未经初始化...
  • C语言static静态变量

    2008-03-30 21:58:00
    从此转载http://www.cnblogs.com/sideandside/archive/2007/03/29/692559.html1. static 变量静态... 例如外部变量虽属于静态 存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全
  • C语言static静态变量的理解及相关函数实例最近在学习c语言statci时遇到了一些问题,现在贴一个代码块实例加深自己的理解 最近在学习c语言statci时遇到了一些问题,现在贴一个代码块实例加深自己的理解 去博客设置...
  • #include<stdio.h> f(int a) ... static int c=3 ; b=b+1; c=c+1; return (a+b+c); } main( ) { int a=2,i; for(i=0;i<3;i++)printf("%d ",f(a)); } //7 8 9 Press any key to continue
  • c语言静态函数调用静态变量 C中的静态变量 (Static Variables in C) Basically, when static variables are declared, they create only a single copy of them and are also termed as Class Variables. 基本上,...
  • static,叫做静态变量。一般用于全局变量里面,首先,我们来考虑一下为什么要用到static,我们可以想一下,一个项目其实是由很多位工程师一起来完成的,他们之间是互相独立完成自己所要完成的一个模块的,这就有可能...
  • php之static静态变量详解 一、总结 把局部变量改变为静态变量后是...1、什么是static静态变量?(以下为在C语言中的理解) 静态变量 类型说明符是static。 静态变量属于静态存储方式,其存储空间为内存中的静态...
  • 从网络资源整理的static的三个作用 第一个作用:对其他文件隐藏。 所有未加static前缀的全局...Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量static还有下面两个作用。 ...
  • static静态变量详解

    2018-03-09 09:43:58
    什么是static静态变量?(以下为在C语言中的理解)静态变量 类型说明符是static。静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序的运行期间...
  • php static静态变量详解

    2018-12-13 14:04:00
    什么是static静态变量?(以下为在C语言中的理解) 静态变量 类型说明符是static。 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序的运行...
  • 什么是static静态变量?(以下为在C语言中的理解) 静态变量 类型说明符是static。 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序的运行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,022
精华内容 1,208
关键字:

static静态变量c语言

c语言 订阅