精华内容
下载资源
问答
  • 局部静态变量

    2016-08-08 13:30:08
    全局变量,局部静态变量,全局静态变量均存储在静态存储区,局部变量存储在栈上,而new出来的变量则存储在堆里。 局部静态变量具有局部作用域,它只被初始化一次,到程序结束前都一直存在,在自身函数体内是可见的...

    全局变量,局部静态变量,全局静态变量均存储在静态存储区,局部变量存储在栈上,而new出来的变量则存储在堆里。

    局部静态变量具有局部作用域,它只被初始化一次,到程序结束前都一直存在,在自身函数体内是可见的,在函数体外是不可见的。而局部变量只是在函数体内存在,函数结束时消失;全局变量则是在程序内所有函数体内都是可见的。因此,将局部变量改为静态局部变量后,作用域不变,仅改变变量的存储方式。

    全局静态变量具有全局作用域,它与全局变量的区别在于如果程序存在多个文件,那么全局静态变量只在定义自身的文件内有效,其它文件内不可见的。而全局变量则对程序内所有文件都可见。也就是说,静态全局变量相对于全局变量而言只是改变了作用域,存储方式不变。

    展开全文
  • 全局变量、全局静态变量、局部变量、局部静态变量区别

    存放位置不同

    局部变量:栈区
    静态局部变量:静态区
    全局变量:静态区的常量区
    全局静态变量:静态区

    栈区

    由编译器自动分配释放,存放函数的参数值,局部变量的值。其操作方式类似于数据结构中的栈。

    堆区

    一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。它与数据结构中的堆不同,它的分配方式类似于链表。

    全局区(静态区)

    全局变量和静态变量的存储是放在一起的,初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和未初始化的静态变量放在相邻的另一块区域。程序结束后由系统释放。

    文字常量区

    常量字符串存放。程序结束后由系统释放。

    程序代码区

    存放函数体的二进制代码。

    作用域

    1. 全局变量有全局作用域。全局变量只需要在一个源文件中定义,就可以作用于所有的源文件。不过,在其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。

    2. 静态全局变量也有全局作用域,但是与全局变量的区别在于全局变量对于所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。即被static关键字修饰过的变量具有文件作用域,它作用于定义它的文件里,不能作用到其他文件里。即使两个不同的源文件都定义了相同的静态局部变量,他们也是不同的变量。不会报错。

    3. 局部变量只有局部作用域,这是自动对象,只在函数执行期存在,函数的一次调用结束后,变量就被撤销,其占用的内存也就被回收了。

    4. 当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。作用域还是局部作用域。
    展开全文
  • 1.全局变量和局部静态变量在不赋初始值的情况下,默认为0; 2.局部变量在不赋初始值的情况下默认为:随机数

    1.全局变量和局部静态变量在不赋初始值的情况下,默认为0;


    2.局部变量在不赋初始值的情况下默认为:随机数

    展开全文
  • 静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存。...类内局部静态变量所有对象共享一个,在编译时分配内存。 #include <iostream> #include <...

    静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存。通过类名,对象,成员函数都可以访问静态成员变量。
    类的静态成员变量需要在类外分配内存空间。
    静态成员函数只能调用静态成员变量。
    成员函数可以调用静态成员变量和静态成员函数。
    类内局部静态变量所有对象共享一个,在编译时分配内存,在第一次函数跑到这里时初始化,之后不再初始化。

    #include <iostream>
    #include <string>
     
    using namespace std;
     
    class test
    {
    public:
        static int m_value1;		//声明私有类的静态成员变量
        int m_value2;
     
    public:
        test()
        {
        	m_value1++;
        }
        
        static int getValue1(){
            return m_value1;
        }
    
        int getValue2(){
            static int i = 1;//编译时赋值,所有对象公用一个
            return ++i;
        }
    
        int getValue()	//定义类的静态成员函数
        {
        	return m_value1;
        }
    };
     
    int test::m_value1 = 0;		//类的静态成员变量需要在类外定义并且分配内存空间
     
    int main()
    {
        test t1;
        test t2;
        test t3;
        
        cout << "test::m_value1 = " << test::m_value1 << endl;	//通过类名直接调用公有静态成员变量,获取对象个数
        cout << "t3.m_value1 = " << t3.m_value1 << endl;		//通过对象名名直接调用公有静态成员变量,获取对象个数
        cout << "t3.getValue() = " << t3.getValue() << endl;	//通过对象名调用普通函数获取对象个数
        cout << "t1.getValue2() = " << t1.getValue2() << endl;//2
        cout << "t2.getValue2() = " << t1.getValue2() << endl;//3
        cout << "t3.getValue2() = " << t1.getValue2() << endl;//4
        return 0;
    }`在这里插入代码片`
    
    展开全文
  • 比较全局变量、全局静态变量、局部变量、局部静态变量的区别,他们在编译完后存储位置在什么地方、初始化值在什么地方、内存什么时候分配、赋初值对这些变量有哪些影响等。要弄清楚这些问题,首先要弄清楚下面几个...
  • 局部静态变量:静态区 全局变量: 静态区的常量区 全局静态变量:静态区 在进行C/C++编程时,需要程序员对内存的了解比较精准。经常需要操作的内存可分为以下几个类别:   1、栈区(stack)— 由编译器自动分配...
  • 全局变量、局部变量、全局静态变量、局部静态变量的区别。要从分配内存的位置和作用域入手来解释。 全局变量,分配的内存在静态存储区内存上面,其作用域是全局作用域,也就是整个程序的生命周期内都可以使用,...
  • C++ 局部静态变量,全局变量,全局静态变量,局部变量的区别和联系C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。...
  • 1.全局静态变量只能被当前源文件引用,不能被工程里其它源文件引用。 除了这点特殊,其它与普通的全局...2.局部静态变量,只执行一次初始化,只能被所在函数引用,函数执行 完毕,变量仍存在,生存周期贯穿整个程序。
  • 局部静态变量和全局静态变量的区别 // Mianshiti.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; static int global1; void test1() { static int num = 0...
  • 比如有全局静态变量、局部变量、局部静态变量等,那么他们之间又有什么区别呢!强烈的求知欲促使我去网上找了很多的资料。也对他们做了一个区分。  C#中变量分为:全局变量、静态全局变量、局部变量和静态局部变量...
  • 那么静态变量是在什么场景下用到呢?我们来假设这样一个场景:在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题...
  • 静态局部变量的特点:1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在...即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。 4.
  • 关于局部变量、局部静态变量的定义 局部变量:形参和函数体内部定义的变量。 局部静态变量:将局部变量定义为static类型。 三者区别 1.形参是一种自动对象,是由传递函数的实参进行初始化,作用域仅仅是在所在函数...
  • C++ 局部静态变量

    千次阅读 2019-06-01 08:41:13
    局部静态变量:当需要令局部变量的生命周期贯穿函数调用之后的时间,可将局部变量定义为static类型 以下函数统计自己被调用了多少次 size_t count_calls(){ static size_t ctr = 0; //调用结束后,这个值仍然有效...
  • 全局变量、静态变量(包括上图中的“文件内部的静态变量”和“局部静态变量”)都具有静态存储期,变量的寿命周期从程序运行时即开始,到程序关闭时结束,其一直存在于内存的同一个地址上。 也就是说,可以将局部...
  • 变量可以分为全局变量静态全局变量静态局部变量局部变量。 按照存储区分:全局变量静态全局变量静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区。   按作用域分:全局变量在整个...
  • Python实现局部静态变量

    千次阅读 2017-01-07 16:02:03
    Python实现局部静态变量[TOC] python没有局部静态变量,但可以通过以下几种方式实现类似于C语言的函数内局部静态变量。1、定义函数属性在python中一切皆对象,函数也是一个对象,因此可以给函数定义属性:def func...
  • #include using namespace std; static int j;//存放在程序全局区,在main函数之前就映射到内存的数据段, //以下任何地方都可...//局部静态变量,生命周期为整个源程序,作用域为该函数(fun1)内 i++; cout<<"i="<<
  • 今天,因为工作需要,遇到一个可能很基础但是又比较模糊的知识点,局部静态变量和全局变量的释放顺序到底是怎么样的呢? 开门见山的说,遵循先声明后释放原则。 但是,怎么知道谁先声明的呢?全局变量声明定义...
  • 2>静态局部变量局部作用域)。自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的, 而静态局部变量只对定义自己的函数体始终可见。 3>局部变量也(局部作用...
  • 换个角度来看这个问题,函数中的静态变量其实可以看做是函数的一个内部变量,而不是调用期间生成的局部变量。所以这里介绍一种使用装饰器的方法给函数添加这样的内部变量。defstatic_vars(**kwarg...
  • 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。...
  • 全局变量、文件域的静态...局部静态变量(一般为函数内的静态变量)在第一次使用时分配内存并初始化。这里的变量包含内置数据类型和自定义类型的对象。 class B{ public: B() { cout ; } ~B() { cout << "B
  • 1.在局部变量前加上“static”关键字,就成了静态局部变量。 2.静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用时,也不会为其重新分配空间。它始终驻留在全局数据区,直到...
  • 局部变量前加上“static”关键字,就成了静态局部变量静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用 时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,610
精华内容 9,044
关键字:

局部静态变量