zoukankan      html  css  js  c++  java
  • C语言,C++,static

      术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,staticC中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(Java中此关键字的含义相同)

    • static变量:

    static局部变量:

    在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。
      1)内存中的位置:静态存储区
      2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,已经被显式初始化的除外)
      3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

         

      当static用来修饰局部变量的时候,

        它就改变了局部变量的存储位置:从原来的栈中存放改为静态存储区。

        改变了初始化方式:static局部变量只被初始化一次,下一次依据上一次结果值。

        改变了生存周期:局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束。

         

    static全局变量:

    在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。
      1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)
      2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
      3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。

    全局全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。不同之处在于,静态全局变量限制了其作用域,只在定义该变量的源文件内有效。

         

    • static函数:

    只能被本文件中的函数调用。static函数与普通函数的区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝.

    C语言中使用静态函数的好处:

      不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名;

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

        

     c++:

       

    参考:

    1.static的作用 http://www.cnblogs.com/dc10101/archive/2007/08/22/865556.html

    2. C/C++中static关键字详解 http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777441.html

  • 相关阅读:
    隐式图回溯法之八皇后问题解答
    试用O(n)来实现求出一个无序数组的中位数
    C++学习第一弹: const 指针 引用答疑
    一道面试题的解答_骑士获得金币问题
    根据已知词表选出好词(直通车)
    python3.5爬虫完成笔趣阁小说的爬取
    关于_水木社区[日经题]_10只狗鉴别1000瓶中哪一瓶药有毒_的解答思路
    数据库想法整合,多表联立交互
    [网络推广]直通车学习
    3行实现模糊匹配
  • 原文地址:https://www.cnblogs.com/mylinux/p/4711426.html
Copyright © 2011-2022 走看看