精华内容
下载资源
问答
  • 函数中静态变量

    千次阅读 2017-11-20 11:20:03
    如果在声明一个静态变量时候没有初始化,那么程序将对它进行初始化。 静态变量默认的初始值始终是0,它被转换成适合于该变量的类型。请记住,对于自动变量来说并非如此。 如果没有初始化自动变量,那么它们包含的...

    你可能想有这样一种变量:可以对它进行局部定义和访问,但是在退出声明它的代码块以后,它还能继续存在。换句话说,需要在一个代码块作用于内声明一个变量,但是要让它有静态存储时间。static说明符为您提供了这样的方法。

    静态变量作用域时所在的代码块,但具有静态存储时间。

    如果在声明一个静态变量时候没有初始化,那么程序将对它进行初始化。静态变量默认的初始值始终是0,它被转换成适合于该变量的类型。请记住,对于自动变量来说并非如此。

    如果没有初始化自动变量,那么它们包含的数据将是最近使用它们所占用内存的程序留下来的值。

    展开全文
  • 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. 基本上,...

    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.

    基本上,声明静态变量时,它们仅创建它们的单个副本 ,也称为类变量

    They retain the value assigned in the corresponding scope and do not initialize the variables again in the new scope of it.

    它们保留在相应范围内分配的值,并且不会在其新范围内再次初始化变量。

    • Static variables remain in the memory space during the execution of the code.

      静态变量在代码执行期间保留在内存空间中。
    • The default value of the initialization of the Static variable is zero (0).

      静态变量初始化的默认值为零(0)。
    • In C programming, it is mandatory for the static variables to be initialized using the constant literal else it returns an error.

      在C编程中,必须使用常量常量初始化静态变量,否则它将返回错误。

    Syntax:

    句法:

    
    static Data_Type variable = value; 
    

    Example:

    例:

    
    #include<stdio.h> 
    void implement() 
    { int x = 0;
    static int counter = 0; 
    counter++; 
    x++;
    printf("\nStatic Variable's value:\n");
    printf("%d",counter);
    printf("\nLocal Variable's value:\n");
    printf("%d",x);
    } 
    
    int main() 
    { 
    implement();
    implement();
    return 0; 
    }
    

    In the above code snippet, the value of the local variable gets initialized again after every function call.

    在上面的代码片段中,每次调用函数后,都会再次初始化局部变量的值。

    Unlike the local variable (x), the static variable (counter) was initialized only once and it did retain the same copy of variable throughout the execution of the program.

    与局部变量(x)不同,静态变量(counter)仅初始化一次,并且在程序执行期间确实保留了相同的变量副本。

    Output:

    输出:

    
    Static Variable's value:
    1
    Local Variable's value:
    1
    Static Variable's value:
    2
    Local Variable's value:
    1
    


    C中的静态函数 (Static Functions in C)

    Static functions in C basically restrict the scope of the method to the corresponding file. These functions can also be called without having the object initialized.

    C语言中的静态函数基本上将方法的范围限制为相应的文件 。 也可以在不初始化对象的情况下调用这些函数。

    • Static functions usually enhance the usability of the code i.e. makes the code ready to be reused again.

      静态函数通常会增强代码的可用性,即使代码准备好再次使用。
    • It limits the visibility of the scope of the function within that particular program.

      它限制了该特定程序内功能范围的可见性。

    Syntax:

    句法:

    
    static Return_Type method_name(parameters)
    {
        body;
    }
    

    Example:

    例:

    
    #include <stdio.h>
    
    //static function definition
    static int sum(int a, int b){
    	return (a+b);
    }
    
    int main()
    {
    	int number1,number2;;
    	printf("Enter the number1: ");
    	scanf("%d",&number1);
    	printf("Enter the number2: ");
    	scanf("%d",&number2);
    	printf("Addition of two numbers = ");
    	int res = sum(number1,number2);
    	printf("%d",res);
    	return 0;
    }
    

    Output:

    输出:

    
    Enter the number1: 10
    Enter the number2: 20
    Addition of two numbers = 30
    


    结论 (Conclusion)

    Thus, in this article, we have understood the importance and behavior of static variables and static functions in the C programming language.

    因此,在本文中,我们已经了解了C编程语言中静态变量和静态函数的重要性和行为。

    翻译自: https://www.journaldev.com/35163/static-variables-functions-in-c

    c语言静态函数调用静态变量

    展开全文
  • c语言静态变量和静态函数

    千次阅读 2019-06-24 05:39:30
    static C语言 C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量函数。... 由于C语言代码是以文件为单位来组织的,一个源程序所有源文件,一个外部变量函数只能某个文件定义一次...
    static C语言

           C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数。而内部变量是指定义在函数内部的函数参数及变量。外部变量定义在函数之外,因此可以在许多函数中使用。由于C语言不允许在一个函数中定义其它函数,因此函数本身只能是“外部的”。
           由于C语言代码是以文件为单位来组织的,在一个源程序所有源文件中,一个外部变量或函数只能在某个文件中定义一次,而其它文件可以通过extern声明来访问它(定义外部变量或函数的源文件中也可以包含对该外部变量的extern声明)。
           而static则可以限定变量或函数为静态存储。如果用static限定外部变量与函数,则可以将该对象的作用域限定为被编译源文件的剩余部分。通过 static限定外部对象,可以达到隐藏外部对象的目的。因而,static限定的变量或函数不会和同一程序中其它文件中同名的相冲突。如果用 static限定内部变量,则该变量从程序一开始就拥有内存,不会随其所在函数的调用和退出而分配和消失。
       C语言中使用静态函数的好处

    1.        静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。
    2.        关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限 于本文件。 使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。

    c语言中static的语义
    1.static变量:
    1).局部
    a.静态局部变量在函数内定义,生存期为整个源程序,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。
    b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。
    2).全局
    全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。但是他们的作用域,非静态全局 变量的作用域是整个源程序(多个源文件可以共同使用); 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。
    2.static函数(也叫内部函数)
    只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。区别于一般的非静态函数(外部函数)
         static在c里面可以用来修饰变量,也可以用来修饰函数。
             先看用来修饰变量的时候。变量在c里面可分为存在全局数据区、栈和堆里。其实我们平时所说的堆栈是栈而不包含对,不要弄混。
            int a ;
            main()
            {
                 int b ;
                 int c* = (int *)malloc(sizeof(int));
            }
            a是全局变量,b是栈变量,c是堆变量。
            static对全局变量的修饰,可以认为是限制了只能是本文件引用此变量。有的程序是由好多.c文件构成。彼此可以互相引用变量,但加入static修饰之后,只能被本文件中函数引用此变量。
            static对栈变量的修饰,可以认为栈变量的生命周期延长到程序执行结束时。一般来说,栈变量的生命周期由OS管理,在退栈的过程中,栈变量的生命也就 结束了。但加入static修饰之后,变量已经不在存储在栈中,而是和全局变量一起存储。同时,离开定义它的函数后不能使用,但如再次调用定义它的函数 时,它又可继续使用, 而且保存了前次被调用后留下的值。
           static对函数的修饰与对全局变量的修饰相似,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。
          static 声明的变量在C语言中有两方面的特征:
      1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
      2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。

      问题:Static的理解

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

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

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

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

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

      答案与分析:

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

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

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

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

      问题:不可重入函数

      曾经设计过如下一个函数,在代码检视的时候被提醒有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类型,则返回为错指针。

    转载于:https://www.cnblogs.com/parrynee/archive/2010/05/14/1735714.html

    展开全文
  • 静态变量与静态函数

    千次阅读 2018-08-16 10:42:50
    堆与栈 ...3、全局区(static):全局变量和静态变量的存储,有系统释放; 4、文字常量区:常量字符串存放,系统释放; 5、程序代码区:存放函数体的二进制代码。 堆与栈的区别: 1.栈内存存...

    堆与栈

    1、栈区(stack):由编译器自动分配释放,存放函数的参数值、局部变量的值等,操作是类似于数据结构中的栈;

    2、堆区(heap):一般有程序员分配和释放(动态存储分配),分配方式类似于链表;

    3、全局区(static):全局变量和静态变量的存储,由系统释放;

    4、文字常量区:常量字符串存放,系统释放;

    5、程序代码区:存放函数体的二进制代码。

    堆与栈的区别:

    1.栈内存存储的是局部变量而堆内存存储的是实体;

    2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;

    3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。

    全局变量静态(static

    1)内存中的位置:静态存储区(静态存储区在整个程序运行期间存在);

    2)初始化:未经初始化的静态全局变量会被程序自动初始化为0,普通全局变量未经初始化的值是任意的;

    3)作用域:全局静态变量的只在声明它的文件下是可见的(从定义到文件结尾),普通全局变量在整个工程中是可见的。

    优点:1)不会被其他文件访问和修改;2)其他文件使用相同的名字的变量不会发生冲突

    局部静态变量

    1)内存中的位置:静态存储区;

    2)初始化:未经初始化的静态局部变量会被程序自动初始化为0,普通局部变量未经初始化的值是任意的;

    3)作用域:作用域仍然是局部的,当定义它的函数或语句块结束时,作用域也随之结束。

    static修饰局部变量时,修改了局部变量的存储位置,从原来的占中存储改为静态存储区。但是静态变量离开作用域后并没有被销毁,仍然驻留在内存中,知道程序结束,但是不能对其访问;

    Static修饰全局变量时,它改变了全局变量的作用域,只在其声明的文件中可见,存储位置内有改变,仍在静态存储区中)

    静态函数

    函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用

    1)静态函数在其他文件中科技定义形同的名字,不会发生冲突;

    2)静态函数不能被其他文件所用;

    3)静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。

    <1>static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
    <2>static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
    <3>static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。

    C++类中静态变量与静态函数

    在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。使用静态数据成员可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。

    1、静态变量的定义:静态数据成员定义或说明时在前面加关键词static

    2、静态变量初始化:与一般成员初始化不同<数据类型><类名>::<静态数据成员名>=<>

    (1) 初始化在类体外进行,而前面不加static,(这点需要注意)以免与一般静态变量或对象相混淆。

    (2) 初始化时不加该成员的访问权限控制符privatepublic等。

    (3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

    3、静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。

    4、静态方法不能直接调用一般成员,可以通过对象引用实现调用

    静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。在静态成员函数的实现中不能直接引用类中说明的非静态成员(原因是,非静态成员函数需要传入一个this指针),可以引用类中说明的静态成员(这点非常重要)。如果静态成员函数中要引用非静态成员时,可通过对象来引用。从中可看出,调用静态成员函数使用如下格式:<类名>::<静态成员函数名>(<参数表>);

    展开全文
  • Python函数静态变量

    千次阅读 2019-09-26 20:41:12
    C语言在函数内部可以定义static类型的变量,这个变量是属于这个函数的全局对象。Python也可以实现这样的机制。 def f(): if not hasattr(f, 'x'): f.x = 0 print(f.x) f.x+=1 f()#输出1 f()#输出2 类...
  • 函数中定义静态变量,虽多次调用函数,但只定义一次!!!!  少废话,先上代码 #include using namespace std; class A { public: A(int a1) :a(a1) {} int a; }; //多次调用,只定义一次,返回同一个 A ...
  • c/c++静态变量和静态函数

    千次阅读 2018-11-11 15:32:26
    它们都是程序编译连接阶段确定的,程序执行的阶段不会改变。 动态存储区分为堆和栈。都是程序执行的过程动态分配的,大小也随之动态变化。从内存管理的实现的角度看来,堆使用的链表实现的,而栈使用的...
  • 静态变量函数

    千次阅读 2019-05-31 11:14:21
    Static关键字 Static关键字有两个作用:修饰变量和修饰函数。...静态局部变量:仅函数体内访问,本文件其他函数体内不可访问;但静态局部变量的值程序运行期间不会销毁; 静态函数:仅本文件调用...
  • C语言静态变量和静态函数(转)

    千次阅读 2019-06-13 10:05:22
    将上面的函数修改为可重入的函数很简单,只要将声明sum变量中的static关键字去掉,变量sum即变为一个auto 类型的变量,函数即变为一个可重入的函数。 当然,有些时候,在函数中是必须要使用static变量的,比如当某...
  • 关于静态函数只能调用静态变量

    千次阅读 2017-08-14 00:03:24
    有次面试的时候被問到,说为什么静态函数只能调用静态变量,我一下懞了,平时只知道这样記着,所以也只能老实回答。面试完后补习了下这块的知识。 推荐一篇很好的文章,关于C++的this指针的:...
  • C__函数中静态变量_static

    千次阅读 2015-10-08 21:15:19
    C语言静态函数中的局部变量可以当做计数器用来计算函数被调用的次数。 示例代码: #include using namespace std; int Add(int temp){ static int sum = 0; sum += temp; return sum; } int main() { ...
  • python创建函数内部静态变量

    千次阅读 2019-07-11 20:49:55
    c语言函数内部的静态变量,可以使得调用函数时,变量的值为上一次退出该函数时变量的值,python也有办法实现同样的功能,示例代码如下: def test(): if ( not hasattr(test,'x') ): #hasattr函数的第一个...
  • 昨天修改项目函数功能时,其中一个类添加了一个静态成员变量和两个静态成员函数,结果链接时出现一个非常典型的错误:“The follwing symbols referenced in processor “p0” could not be resolved:Class:...
  • 本来的一个想法是C++ 的类的成员函数是属于这个类的,那么这个类的成员函数中静态变量也是属于这个类的。不过越想越感觉不对劲,于是写了个测试代码,试了一下。还真不对,结果是类的成员函数中静态变量,他的...
  • 在静态成员函数中访问非静态成员变量 正常情况下一个static修饰的静态成员函数是无法对非静态成员变量进行访问与操作的 : #include &amp;lt;iostream&amp;gt; using namespace std; class Date { ...
  • c++ 静态成员变量用static 关键字来声明,是整个类的数据成员,其存储不占用某个具体对象的空间,其存储在静态存储区。 c++ 静态成员函数用static 关键字来声明,用于处理静态成员变量,可以用类名来调用,也可以用...
  • C++ 静态成员变量静态成员函数

    千次阅读 2017-11-06 11:33:08
    一、静态成员变量1)定义静态成员变量 关键字 static 可以用于说明一个类的成员,静态成员提供了一个同类对象的共享机制  把一个类的成员说明为 static 时,这个类无论有多少个对象被创建,这些对象共享这个 ...
  • 一、外部函数(定义时默认) 定义函数时,如果...但是,调用外部函数时,声明中不可省略extern。 /* 另一个文件max.c */ extern int max(int x,int y)//定义时,也可以不加extern,默认即为外部函数 { ...
  • C#静态函数静态变量

    千次阅读 2018-08-21 15:30:04
    C# 类的静态成员 我们可以使用 static 关键字把类成员定义为静态的。当我们声明一个类成员为静态时,意味着无论有...静态变量成员函数或类的定义外部进行初始化。你也可以类的定义内部初始化静态变量。 下面...
  • 1、静态变量的存储方式和生命周期:属于静态存储方式,其存储空间为内存的静态数据区,该区域的数据整个程序的运行期间不会释放,所以其生命周期为整个程序运行时间段。2、静态局部变量:定义在函数体内
  • 递归函数中静态变量的疑惑

    千次阅读 2013-03-25 16:59:47
    ... ... ...递归函数中静态变量的疑惑 [问题点数:30分,结帖人hanyj_3000] hanyj_3000 hanyj_3000 等级: 结帖率:100% 楼主发表于: 2011-09-02 22:26:46 本帖
  • 我认为以下这两种解释都是类似的,正确的: 解答一:static 只能修饰 成员变量 或者成员方法。不能修饰局部变量。Java ,用static 修饰的成员 被是为 共享的。定义方法,被视为 ...解答二 :静态变量时属于整
  • 其实我们从直观上可以很好的理解静态成员函数不能调用非静态成员变量这句话因为无论是静态成员函数还是静态成员变量,它们都是类的范畴之的,及类的整个生存周期里始终只能存在一份。然而非静态成员变量和非...
  • 做个笔记不但是为以后重新温习做记录,也可以加深一下印象,有百利而无一害,并且网上记录一下,方便网民们相互提醒交流,万一以后老了翻翻看,还能根据记录写写个人传记什么的。   前段时间面试一家大公司
  • Java静态变量和静态函数

    千次阅读 2015-03-11 15:50:23
    Java静态变量和静态函数(方法)和C++也类似。有几点需要重新复习一下: 1)如果想让一个类的所有对象共享数据,可以使用静态变量;如果想共享函数,可以使用静态函数。 2)如果某个对象修改了静态变量...
  • 静态成员函数访问非静态成员变量 1.思路: 静态成员函数属于类(通过类访问,调用函数时没有提供this指针), 非静态成员函数属于实例(通过对象访问)(默认都提供了this指针), 非静态成员也属于实例(通过...
  • 场景:使用回调函数时,需要将回调函数设置为静态函数,但是该回调函数中需要引用非静态成员变量 方法1:声明一个全局变量,比如 llll* g_llll; 构造函数中,将this指针赋给g_llll; 在静态回调函数中,...
  • 同步博文:static 变量:静态局部变量:静态全局变量:static 函数…..:内部函数(又称静态函数):外部函数:[案例]外部函数应用。开心分享: 本博文的简述or解决问题? ​ 详情: 见简介 同步博文: 本篇的csdn/...
  • C++静态变量成员与静态成员函数 声明为static的类成员(成员数据或成员函数)称为类的静态成员特性 : 静态成员为所有的类对象所共享,不属于某个具体的事例 静态成员即可用类名::静态成员或者对象....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 687,737
精华内容 275,094
关键字:

在函数中声明的静态变量