zoukankan      html  css  js  c++  java
  • c++静态变量(static)

    写在前面:

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

    2.C++中,在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。当局部变量被定义时,系统不会对其初始化,必须自行对其初始化。

    在程序中,局部变量和全局变量的名称可以相同。但是在函数内的局部变量与全局变量是两个独立的变量,互不影响,全局变量的值可以在局部函数内重新赋值。

    注:全局变量从定义处开始至程序结束起作用,即全局变量存在有效作用域。

    #include<iostream>
    using namespace std;
    
    int main()
    {
         cout<<"a= "<<a<<endl; //编译不通过,a是未知字符
         return 0;
    }
    int a=10; //全局变量从此处定义

    若要想让 main 函数也使用全局变量 a,可以用 extern 对全局变量进行声明,就可以合法使用了。

    #include<iostream>
    using namespace std;
    
    int main()
    {
         extern int a;
         cout<<"a= "<<a<<endl; //合法,输出10
         return 0;
    }
    int a=10; //全局变量从此处定义

    静态变量

    存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和 static 变量。

    1.静态局部变量:作为 static 局部变量在函数内定义,它的生存期为整个源程序,但是其作用域仍与局部变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它!

    #include <iostream>
    using namespace std;
    
    int count = 1; //全局变量
    int fun()
    {
        static int count = 10; // 在第一次进入这个函数的时候,变量 count 被初始化为 10  
        return count--; //以后每次进入该函数就不会被再次初始化了,count 的值是上一次函数运行之后的值  (如果不用static的话,每次调用局部变量count都是10,也就是每次都会先初始化)     
    }
    
    int main()
    {
       for(;count <= 10; ++count)
          cout<<"全局变量:"<<count<<"      静态局部变量:"<<fun()<<endl;
       return 0;
    }
    
    
    输出:
    全局变量:1      静态局部变量:10
    全局变量:2      静态局部变量:9
    全局变量:3      静态局部变量:8
    全局变量:4      静态局部变量:7
    全局变量:5      静态局部变量:6
    全局变量:6      静态局部变量:5
    全局变量:7      静态局部变量:4
    全局变量:8      静态局部变量:3
    全局变量:9      静态局部变量:2
    全局变量:10      静态局部变量:1
    

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

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

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

    总结:

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

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

    写在后面:

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

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

    参考:https://www.runoob.com/cplusplus/cpp-variable-scope.html

  • 相关阅读:
    Eclipse版本
    关于软件版本的说明
    JDK
    java2的三个版本
    vue 自定义下拉选择table组件
    网络图片转base64
    关于重力加速计文章
    整理 node-sass 安装失败的原因及解决办法
    kurentoClient
    es2020
  • 原文地址:https://www.cnblogs.com/USTC-ZCC/p/13924504.html
Copyright © 2011-2022 走看看