C++:Static修饰变量 vs Static修饰函数
发布日期:2021-05-07 00:50:57 浏览次数:22 分类:技术文章

本文共 1323 字,大约阅读时间需要 4 分钟。

在C++语言中,Static关键字有两个作用:修饰变量和修饰函数。

Static修饰全局变量叫做静态全局变量,

Static修饰局部变量叫做静态局部变量,

Static修饰函数叫做静态函数;

静态全局变量:限制变量的作用域,仅在本文件中访问,其他文件不可访问;

静态局部变量:仅在本函数体内访问,本文件其他函数体内不可访问;但静态局部变量的值在程序运行期间不会销毁;

静态函数:仅在本文件中调用,其他文件中不可调用,即程序员不用担心编写的函数与其他文件的函数同名。

工具/原料

  • C++ Static关键字

方法/步骤

  1. 1

    静态全局变量:Static修饰全局变量

    #include<iostream>

    #include<stdio.h>

    using namespace std; 

    static int j; // 静态全局变量

    int fun2(void){

           j = 0;

           j++;

           return j;

    }

     

    int main()

    {

           int k = 0, n = 0;

           for(k=0; k<10; k++){

                  n = fun2( );

                  printf("%d\n", n);

           }

           getchar();

           return 0;

    }

    此时,静态全局变量的值与全局变量的值结果一致;只是作用域不同;

  2. 2

    静态局部变量:Static修饰局部变量

    #include<iostream>

    #include<stdio.h>

    using namespace std; 

    int fun1(void)

    {

           static int i = 0;//静态局部变量

           i++;

           return i;

    }

    int main()

    {

           int k = 0, m = 0;

           for(k=0; k<10; k++){

                  m= fun1( );

                  printf("%d\n", m);

           }

           getchar();

           return 0;

    }

    此时,静态局部变量的值在程序运行期间不销毁;

  3. 3

    静态函数:Static修饰函数

    #include<iostream>

    #include<stdio.h>

    using namespace std; 

    static int fun1(int i)//静态函数

    {

           return i++;

    }

    int main()

    {

           int k = 0, m = 0;

           for(k=0; k<10; k++){

                  m= fun1(k);

                  printf("%d\n", m);

           }

           getchar();

           return 0;

    }

    此时,静态函数运行过程和子函数运行过程一致,只是作用域不同;

  4. 4

    特别声明:

    (1)静态局部变量数据属于静态存储,在静态存储区内分配内存单元,在整个程序运行期间都不释放;

    ...........动态局部变量属于动态存储,占动态存储区空间而不占用静态存储区空间,函数调用结束后立即释放空间。

    (2)静态局部变量时在编译时被赋值的,即自始至终只赋值一次,在程序运行时它已经有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。

    ..........自动变量赋初值,不是在编译时进行的,而是在运行时进行,所以每调用一次函数就赋一次初值。

    END

上一篇:MySQL子查询 嵌套查询
下一篇:C++ initializer_list 类型详解

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年03月22日 16时00分06秒