精华内容
下载资源
问答
  • 全局变量 全局变量默认初始化为0,字符型变量为空字符’’ 定义在函数外,可被本文件及其他文件的函数使用...同一文件中全局变量局部变量可以同名,在局部变量作用域内,全局变量不起作用 静态全局变量 静态...
    1. 全局变量
      • 全局变量默认初始化为0,字符型变量为空字符’’
      • 定义在函数外,可被本文件及其他文件的函数使用(外部链接),其他文件使用时序用extern声明
      • 生命周期和程序运行周期一样
      • 不同文件的全局变量不可以重名
    2. 局部变量
      • 如果没有赋初值,内容为随机
      • 如果定义在符合语句内,只在复合语句中有效
      • 同一文件中全局变量和局部变量可以同名,在局部变量作用域内,全局变量不起作用
    3. 静态全局变量
      • 静态全局变量的值只初始化一次,默认初始化为0,字符型变量为空字符’’
      • 作用域限制在本文件内(内部链接),因此不同文件的静态全局变量可以重名
      • 生命周期和程序运行周期样
      • 存储在静态区
    4. 静态局部变量
      • 静态局部变量在函数第一次调用的时候构造,只初始化一次,默认初始化为0,字符型为空字符
      • 作用域为定义的函数内
      • 生命周期和程序运行周期一样
      • 存储在静态区
    5. 全局函数
      • c语言中的函数默认都是全局的,使用static关键字可以将函数声明为静态,静态函数只能在本文件中使用
    6. 静态函数
      • 静态函数只能在本文件中使用,因此不同文件的静态函数可以重名
    7. 总结
      类型	作用域	生命周期auto变量	一对{}内	当前函数static局部变量	一对{}内	整个程序运行期extern变量	整个程序	整个程序运行期static全局变量	当前文件	整个程序运行期extern函数	整个程序	整个程序运行期static函数	当前文件	整个程序运行期register变量	一对{}内	当前函数
    展开全文
  • 全局变量局部变量静态全局变量、静态局部变量的区别   转自:http://hi.baidu.com/sindana/blog/item/06fe68171e364401c93d6ded.html 标签:全局变量 局部变量 静态全局变量 静态局部变量 ...
    全局变量局部变量静态全局变量、静态局部变量的区别
     

    转自:http://hi.baidu.com/sindana/blog/item/06fe68171e364401c93d6ded.html

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

    从作用域看:

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

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

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

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

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





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

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

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

    Tips:
      A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
      B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
      C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题,因为他们都放在静态数据存储区,全局可见;
    D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)
    E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。
    展开全文
  • 全局变量静态变量生命周期是一样的,都要等到程序结束被释放 二者作用域不一样,静态变量取决于定义在哪里。全局变量(定义在函数外的变量),作用域为整个文件,通过extern实现跨文件引用。 普通变量与全局变量...

    https://www.cnblogs.com/lanjianhappy/p/6035433.html
    全局变量和静态变量的生命周期是一样的,都要等到程序结束被释放
    二者作用域不一样,静态变量取决于定义在哪里。全局变量(定义在函数外的变量),作用域为整个文件,通过extern实现跨文件引用。

    普通变量与全局变量,生命周期不一样,分配的空间位置不一样。普通变量不会被初始化,但全局变量默认初始化。

    展开全文
  • 定义在主函数外面是全局变量,分配的内存在静态内存,整个工程内都可以访问到他的值,但是优先级低。只有程序退出后才会释放他的内存。冲突的时候优先使用局部变量。 定义在函数内的变量时局部变量,分配的是内存...

    定义在主函数外面是全局变量,分配的内存在静态内存,整个工程内都可以访问到他的值,但是优先级低。只有程序退出后才会释放他的内存。冲突的时候优先使用局部变量。
    定义在函数内的变量时局部变量,分配的是内存堆栈,只有特定的函数内可以访问到,退出函数后自动释放内存堆栈。优先级高
    1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:
    全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。
    从作用域看:
    1>全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。
    2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。
    3>局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。
    4>静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。
    2.从分配内存空间看:
    1>全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间
    2>全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
    1)静态变量会被放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
    2)变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。
    从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。应予以注意。
    Tips:
      A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
    B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
    C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题,因为他们都放在静态数据存储区,全局可见;
    D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)
    E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

    展开全文
  • 生命周期 默认值 普通全局变量 整个工程 程序运行到程序结束 0 静态全局变量 当前文件 程序运行到运行结束 0 普通局部变量 函数内 函数运行到运行结束 随机值 静态局部...
  • 全局变量、static全局变量、static局部变量都存在于程序的整个生命周期中;局部变量存在于函数执行期间,函数结束,变量消亡,其内存被回收。3.作用域 全局变量具有全局作用域,在整个源程序内可用。 static全局变量...
  • C++ 全局变量局部变量静态全局变量静态局部变量的区别 C++ 变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为 6 种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件...
  •  今天在论坛上看到有朋友发帖问道:既然静态全局变量全局变量都存储在全局数据区,为什么作用域却不一样呢?也许答案非常简单:C++就是这么规定的,静态全局变量全局变量的唯一区别就是作用域不同。  对一个...
  • 全局变量局部变量静态...的区别从作用域看:从分配内存空间看:Tips 原文链接:Runoob, C++变量作用域_author: %fs. C++ 变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为 6 种:全局作用域...
  • 全局变量+static => 作用域改变 局部变量 + static => 作用域不变,生命周期改变,存储方式改变
  • 生命周期 初始化 java C/C++ 全局变量(外部变量) 整个工程文件内 内存的静态存储区域 整个源程序 0 没有全局变量的概念 在main()函数前(类外)定义,用extern int g_int ;声明,才可以使用 静态全局变量 ...
  • 1.C/C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。 从作用域看: ...静态局部变量具有...
  • 全局变量 作用域:全局作用域(全局变量只需在一个源文件中定义,就可以作用于所有的源文件。) 生命周期:程序运行期一直... 全局静态变量 作用域:文件作用域(只在被定义的文件中可见。) 生命周期:程序运行
  • 1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。...2>静态局部变量具有局部作用域

空空如也

空空如也

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

局部变量全局变量静态变量生命周期