精华内容
下载资源
问答
  • 局部变量,全局变量,静态变量的作用域,生命期? C++变量根据定义位置的不同,具有不同的作用域作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件...静态局部变量具有局部作用域

    局部变量,全局变量,静态变量的作用域,生命期?

    C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。

    从作用域看:

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

    静态局部变量具有局部作用域。它只被初始化一次,自从第一次初始化直到程序与你新内阁结束都一直存在,他和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。

    局部变量也只有局部作用域,他是自动对象,他在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用结束后,变量就被撤销,其所占用的内存也被收回。

    静态全局变量也具有全局作用域,他与全局变量的区别在于如果程序包含多个文件的话,他作用于定义它的文件里,不能作用到其他文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同的静态全局变量,他们也是不同的变量。

    从分配内存空间看:

             全局变量、静态局部变量、静态全局变量都在静态存储区分配空间,而局部变量在栈分配空间。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上没有什么不同。区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其他源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。

    1、静态变量会被放在程序的静态数据存储区里,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是他与堆栈变量和堆变量的区别

    2、变量用static告知编译器,自己仅仅在变量的作用域范围内可见。这一点是他与全局变量的区别。

    从以上分析可以看出,把局部变量改变为静态变量后是改变了他的存储方式,即改变了他的生存期。把全局变量改变为静态变量后是改变了他的作用域,限制了他的使用范围,因此static这个说明符在不同的地方起的作用是不同的。

    TIPS:

             1、若全局变量仅在单个文件中访问,则可以讲这个变量修改为静态全局变量。

             2、若全局变量仅在单个函数中使用,则可以将这个变量修改为该函数的静态局部变量。

             3、全局变量、静态局部变量、静态全局变量都存放在静态数据存储区。

             4、函数中必须要使用static变量的情况:当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

     

    展开全文
  • 最近看《C程序设计》第五版唐浩强著对静态局部变量有这样一段: > 对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的...
  • 局部变量:  一种动态存储方式,在作用域内定义时创建,到作用域结束时销毁。  定义局部变量时若未初始化,对内置类型来说,其值是为定义的。...静态局部变量: ... 注意:静态局部变量的生存期(life

    局部变量:

          一种动态存储方式,在作用域内定义时创建,到作用域结束时销毁。

          定义局部变量时若未初始化,对内置类型来说,其值是为定义的。

    静态局部变量:

          一种静态存储方式,在作用域内定义时创建,到程序结束时销毁。

          定义静态局部变量是若未初始化,对内置类型来说,初始化为0

          注意:静态局部变量的生存期(lifetime)是从定义开始到程序运行结束,但其作用域并未发生变化,下次调用该静态局部变量时其值仍然存在

    全局变量:

           静态存储方式,生存期到程序运行结束。

           全局变量对整个程序时可见的,例如,在一个工程中有多个文件:1.cpp 2.cpp 3.cpp,int x是在1.cpp中定义的全局变量,该变量在整个工程中是可见的,在其他文件中要想调用x,需要extern int x;进行声明,否则    发生错误。

    静态全局变量:

            静态存储方式。

            相对于全局变量来说,静态全局变量的作用域仅在定义该变量的文件中,在其他文件中不能使用。就上例而言,x只能在定义它的1.cpp中调用。

     

    由此可见,同样是静态变量,静态局部变量与静态全局变量的改变效果是不同,静态局部变量相对于局部变量改变了生存期,而作用域未发生变化;静态全局变量相对于全局变量改变了作用域,而生存期未发生变化。

    展开全文
  • C++ 全局变量、局部变量、静态全局变量、静态局部变量的区别 C++ 变量根据定义的位置的不同的生命周期,具有不同的作用域作用域可分为 6 种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和...

    C++ 全局变量、局部变量、静态全局变量、静态局部变量的区别

    C++ 变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为 6 种:全局作用域局部作用域语句作用域类作用域命名空间作用域和文件作用域

    从作用域看:

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

    静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。

    局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。

    静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。

    从分配内存空间看:

    全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间。

    全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

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

    从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。应予以注意。

    Tips:

    • A、若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
    • B、若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
    • C、设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题,因为他们都放在静态数据存储区,全局可见;
    • D、如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)
    • E、函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

    -----------------------------------------------------------------------------------------------------------

    static 全局变量:改变作用范围,不改变存储位置

    static 局部变量:改变存储位置,不改变作用范围

    静态函数 :在函数的返回类型前加上static关键字,函数即被定义为静态函数。静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其它文件使用。

    如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数也称为内部函数。定义一个内部函数,只需在函数类型前再加一个“static”关键字即可

    展开全文
  • 全局变量、静态局部变量、局部变量、静态全局变量 全局变量 全局作用域 全局变量只需在一个源文件中定义,就可以作用于所有的源文件。其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局...

    全局变量、静态局部变量、局部变量、静态全局变量

    全局变量 全局作用域 全局变量只需在一个源文件中定义,就可以作用于所有的源文件。其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。 静态存储区分配空间
    静态全局变量 全局作用域 如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。 静态存储区分配空间
    静态局部变量 局部作用域 只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在。静态局部变量只对定义自己的函数体始终可见。 静态存储区分配空间
    局部变量 局部作用域 它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。 栈里分配空间

    PS:

    C++变量具有6种不同作用域:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。

    可编程内存
    静态存储区 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。 主要存放静态数据、全局数据和常量。
    栈区 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。 栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
    堆区(动态内存分配) 程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。 动态内存的生存期可以由程序员自己决定

    C++内存模型

    展开全文
  • 静态局部变量,是在函数内部声明的。 当一个函数结束执行后,其所有局部变量都会被销毁。 优势,我们需要保留局部变量的值,以便在下次调用时使用。 C++提供了静态局部变量机制来达到此目的。 在整个...
  • 首先从作用域考虑: C++里作用域可分为6种:全局...如果俩个文件定义了相同名字的静态局部变量,那他们是俩个不同的变量,而非一个。 局部变量 - 局部作用域,比如函数的参数,函数内的局部变量等等。 静态局部变量
  • C++变量根据定义位置的不同,具有不同的作用域作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件...静态局部变量具有局部作用域。它只被初始化一次,自从第一次初始化直到程序与你新
  • 1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。...2>静态局部变量具有局部作用域
  • C++ 全局变量、静态全局变量、局部变量、静态局部变量的使用,整理表格如下:分类 全局变量 静态全局变量(static) 局部变量(auto) 静态局部变量(static) 作用域 全局作用域(extern) 文件作用域(当前文件) 局部作用域...
  • 变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。 按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态 存储区域,局部变量存放在内存的栈区。 按作用域分,全局变量在整个...
  • 关于静态局部变量与静态外部变量

    千次阅读 2017-11-09 19:14:10
    1:静态局部变量存储在静态存储区,如果赋有初值,函数调用期间只赋值一次,下次调用该函数时,静态局部变量值为上次调用之后的结果,原因:静态局部变量在函数调用期间是不释放的;而自动变量在每次调用函数时都会...
  • 1.从作用域看: C++变量根据定义的位置的不同的生命周期,具有不同的作用域作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。...2>静态局部变量具有局部作用域
  • 2、作用域较小的局部变量隐藏作用域较大的局部变量 例如:上图里的运算结果: 此时 int x = 1, y = 1;作用域较小会隐藏 x = 0, y = 0;的作用域。 全局变量(静态储存) 从此程序开始到此程...
  • 静态局部变量

    2014-10-16 10:33:09
    静态局部变量 在局部变量前加上“static”关键字,就成了静态局部变量静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用 时,也不会为其重新分配空间。它始终驻留在全局...
  • 按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。 按作用域分,全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量...
  • 变量的分类 变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。 按存储区域:全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。 按 作用域:全局...
  • C/C++全局变量和局部变量作用域问题

    千次阅读 2017-05-25 15:57:42
    局部变量(通常在函数中定义)的作用域是从声明的那一点开始,直到这个声明所在的块结束为止(一个块就是由{}围起来的一段代码)。全局变量(在所有函数、类、命名空间之外定义)的作用域从声明的那一点开始,直到这...
  • 按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 按作用域分: 1、全局变量在整个工程文件内都有效; 2、静态全局变量只在定义它的文件内有效; 3、...
  •  从本质上说,三者均属于局部作用域中的变量,其中局部变量又可以分为普通(非静态)局部变量和静态局部变量。它们的差别: 作用域:形参的作用域为整个函数体;而普通(非静态)局部变量和静态局部变量作用域...
  • 静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。...
  •  今天在论坛上看到有朋友发帖问道:既然静态全局变量与全局变量都存储在全局数据区,为什么作用域却不一样呢?也许答案非常简单:C++就是这么规定的,静态全局变量与全局变量的唯一区别就是作用域不同。  对一个...
  • 概念首先得明白局部变量,静态局部变量,全局变量,静态全局变量这几个概念,以下面程序举例://main.cpp int a = 0; //全局变量 static int b=0;//静态全局变量 main() { int c; //局部变量 static int d;//静态...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 105,186
精华内容 42,074
关键字:

静态局部变量的作用域