精华内容
下载资源
问答
  • 静态变量与动态变量

    万次阅读 多人点赞 2018-08-02 20:21:10
    静态变量,全局动态变量都是静态存储 2)动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放 3)静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。通常把由于变量存储方式...

    0.静态存储与动态存储

    1)静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。静态变量,全局动态变量都是静态存储

    2)动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放

    3)静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。通常把由于变量存储方式不同而产生的特性称为变量的生存期

    4)静态存储只会初始化一次

     

    摘自于:百度百科

     

    1.区别

    定义或者声明变量时,没有static修饰符的就是动态变量,有static修饰符的就是静态变量

     

    2.动态变量(一下简称变量)

    2.1全局变量

    1)在所有函数的外部定义(包括主函数),定义之后的所有函数都能使用,属于静态存储

    2)作用域为整个项目,即最终编译成可执行文件的所有文件中均可以使用动态全局变量。外部文件可以通过extern关键字来声明另一个文件中存在的全局变量

    3)生命周期为从程序运行到程序退出,即贯穿整个运行时间

    4)无显式初始化时默认初始化值为0

    看一个有关全局变量多文件的例子:

    main.cpp

    #include <iostream>
    using namespace std;
    
    int var_a = 0;
    
    void fun1();
    void fun2();
    
    void fun0()
    {
    	var_a = var_a + 1;
    	cout << "fun1:" << var_a << endl;
    }
    
    
    int main()
    {
    	fun0();
    	fun1();
    	fun2();
    	fun0();
    
    	system("pause");
    	return 0;
    }

    variable1.cpp

    #include <iostream>
    using namespace std;
    
    extern int var_a;
    
    void fun1()
    {
    	var_a = var_a + 1;
    	cout << "fun3:" << var_a << endl;
    }

    variable2.cpp

    #include <iostream>
    using namespace std;
    
    extern int var_a;
    
    void fun2()
    {
    	var_a = var_a + 1;
    	cout << "fun3:" << var_a << endl;
    }

    运行结果:

    可以发现,全局变量var_a在所有文件中都共享,每个文件都可以访问它并修改它的值

    2.2局部变量

    1)在函数内部定义,属于动态存储,其他函数不能访问,外部文件也不能访问,否则会出现:

    2)作用域为当前函数,从定义位置,到其所在的{}的结束位置

    3)生命周期为从函数调用到函数退出

    4)无显式初始化时默认初始化值为随机值

     

    3.静态变量

    3.1静态全局变量

    1)作用域为当前文件,从定义/声明位置到文件结尾

    2)生命周期为从程序运行到程序退出,即贯穿整个运行时间

    3)无显式初始化时默认初始化值为0

    静态全局变量与动态全局变量的主要不同:

    动态全局变量可以通过extern关键字在外部文件中使用,但静态全局变量不可以在外部文件中使用。静态全局变量相当于限制了动态全局变量的作用域

    看一个例子:

    #include <iostream>
    using namespace std;
    
    static int b = 10;
    
    void fun()
    {
    	int b = 0;
    	cout << "b = " << b << endl;
    	b++;
    }
    
    int main()
    {
    	for (int i = 0; i < 5; i++)
    		fun();
    
    	system("pause");
    	return 0;
    }

    得到结果:

    为什么得到5个0呢,为什么不是0,1,2,3,4呢

    这是因为在函数fun中定义了一个动态局部变量a,而a同时又是静态全局变量,在这种情况下,作用域小的掩盖作用域大的,所以局部变量会掩盖全局变量。所以动态局部变量a掩盖了静态全局变量a

    3.2静态局部变量

    1)作用域为当前函数,从定义位置,到其所在的{}的结束位置

    2)生命周期为从程序运行到程序退出,即贯穿整个运行时间,当下次函数调用时,静态局部变量不会被再次初始化,而是沿用上次函数退出时的值

    静态局部变量与动态局部变量的主要不同:

    两者作用域相同,都在函数内部,但是两者生命周期不一样,静态局部变量的生命周期是到程序的结束,而动态局部变量的生命周期是函数的结束,静态局部变量的生命周期更长,同时静态局部变量只会初始化一次,函数重复调用,但静态局部变量不会被重新初始化

    看一段代码:

    #include <iostream>
    using namespace std;
    
    void fun()
    {
    	int a = 0;
    	static int b = 0;
    	cout << "a = " << a << endl;
    	cout << "b = " << b << endl;
    	a++;
    	b++;
    }
    
    int main()
    {
    	for (int i = 0; i < 5; i++)
    		fun();
    
    	system("pause");
    	return 0;
    }

    执行结果:

    得到这样的结果也是自然的

    参考来源:

    C语言动态变量与静态变量的区别

    C和C++中全局变量,局部变量,静态变量和常量

    展开全文
  • 区分静态变量与动态变量,解决循环跳出问题或递归参数变化问题 自动变量 for(int a;a<=3;++a){ int b = 0; ++b; cout<<b<<endl; } 每次循环b被重置赋值 静态变量 for(int a;a<=3;++a){ ...

    区分静态变量与动态变量,解决循环跳出问题或递归参数变化问题

    自动变量

    for(int a;a<=3;++a){
    		int b = 0;
    		++b;
    		cout<<b<<endl;
    	}
    

    在这里插入图片描述
    每次循环b被重置赋值

    静态变量

    for(int a;a<=3;++a){
    		static int b = 0;
    		++b;
    		cout<<b<<endl;
    	}
    

    在这里插入图片描述
    每次循环变量b不变,
    在函数迭代中,静态变量系统会保持其储存空间和数值。下次调用这个函数的时候,static变量还是上次退出的函数值,但不会带出函数成为全局变量。

    展开全文
  • 静态变量,全局动态变量都是静态存储, 存储在全局数据区,在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。静态存储变量是一直存在的,只会初始化一次。 2.2动态存储 局部动态变量是动态存储, 动态...

    1.定义

    动态变量:int a;
    静态变量:static int a;

    2.静态存储与动态存储

    2.1静态存储

    静态变量,全局动态变量都是静态存储,
    存储在全局数据区,在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。静态存储变量是一直存在的,只会初始化一次。

    2.2动态存储

    局部动态变量是动态存储,
    动态存储变量是在程序执行过程中,使用它时才分配存储单元,存储在内存出栈数据区,使用完毕立即释放

    总结:静态存储,只初始化一次,每次调用从变化后的值继续改变;动态存储,每次调用都从初始值开始

    3.动态变量

    3.1全局动态变量

    1)在所有函数的外部定义(包括主函数),定义之后的所有函数都能使用,属于静态存储
    2)生命周期为从程序运行到程序退出,贯穿整个运行时间
    3)无显式初始化时默认初始化值为0

    3.2局部动态变量

    1)在函数内部定义,属于动态存储,作用于为当前函数
    2)生命周期为从函数调用到函数退出
    3)无显式初始化时默认初始化值为随机值

    4.静态变量

    4.1全局静态变量

    1)作用域为当前文件,从定义位置到文件结尾
    2)生命周期为从程序运行到程序退出,即贯穿整个运行时间
    3)无显式初始化时默认初始化值为0

    动态全局变量可以通过extern关键字在外部文件中使用,静态全局变量不可以在外部文件中使用。

    4.2局部静态变量

    1)作用域为当前函数
    2)生命周期为从程序运行到程序退出,即贯穿整个运行时间,当下次函数调用时,静态局部变量不会被再次初始化,而是沿用上次函数退出时的值

    展开全文
  • 静态变量与动态变量的定义与区别

    千次阅读 2019-01-23 13:14:33
    动态变量静态变量的定义和区别如下: 1.定义上,静态变量动态变量在多一个关键字static,比如: 动态变量::int i; 静态变量:static int i; 2.动态变量在子程序中,每次调用都会从它的初始值开始调用,而...

    动态变量和静态变量的定义和区别如下:

    1.定义上,静态变量比动态变量在多一个关键字static,比如:

    动态变量::int i;

    静态变量:static int i;

    2.动态变量在子程序中,每次调用都会从它的初始值开始调用,而不管他在函数中经历了什么变化;静态变量会从变化后的值继续改变

    void fun()        
    {
        int j=0;
        j++;
        printf("%d",j);
    }
    
    void fun1()        
    {
        static int j=0;
        j++;
        printf("%d",j);
    }
    
    void main()
    {
        int i;
        for(i=0;i<5;i++)
            fun();//输出结果为11111
    
        printf("\n");
    
        for(i=0;i<5;i++)
            fun1();//输出结果为12345
    }
    

     

    展开全文
  • 动态变量静态变量的区别: 1、存储位置动态变量:存储在内存出栈数据区静态变量:存储在全局数据区(静态数据区) 2、生命期 动态变量:根据你定义的位置确定,比如你在一个函数中定义的,那么超出该函数范围...
  • 一、变量按作用域范围分类 局部变量:在函数内定义的变量,作用域限于函数内。 说明:(1)主函数定义的变量不能再其他函数中使用,主函数也不能使用其他函数定义的变量。 (2)形参变量属于被调函数的局部变量,...
  • void f(int ** q)//是个指针变量,无论q是个什么类型的变量,都只占4个字节 { int i = 5; //*q等价于p,q和**q都不等价于p //*q = i;//error 因为p等价于&i,所以*q等价于&i *q = &i;//p ...
  • extern 放在变量或者函数之前,表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 常用代码: //file_1.h int num; //在全局作用域里声明num //file_2.cpp extern int num...
  • 【fishing-pan:https://blog.csdn.net/u013921430转载请... 概述 局部变量 在一个函数内部定义的变量(包括函数形参)是局部变量。... 静态变量 静态全局变量 在全局变量...
  • 动态变量与静态变量的区别及用法 0.静态存储与动态存储 1)静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。静态变量,全局动态变量都是静态存储 2)动态存储变量是在程序执行过程...
  • 静态存储与动态存储 1)静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。静态变量,全局动态变量都是静态存储 2)动态存储变量是在程序执行过程中...静态局部变量与动态局部变量的...
  • 变量与常量 变量:指的是在程序运行过程中,可以通过代码使他的值改变的量。 常量:程序运行过程中不会改变的量。 局部变量 局部变量:定义在函数中的变量。 全局变量 全局变量:定义在函数外面的变量。 #...
  • 动态变量与静态变量的区分就是定义该属性有无static修饰符。两者之间的主要区别是, ①存储空间不同且生命期不同 动态变量:存储在动态数据区,跟随定义的函数出现/消失 静态变量:存储在静态数据区,在应用程序...
  • 静态变量静态变量使用 static 修饰符进行声明在所属类被装载时创建通过类进行访问所属类的所有实例的同一静态变量都是同一个值非静态变量:不带有 static 修饰符声明的变量称做非静态变量在类被实例化时创建通过...
  • 什么是局部变量:定义在函数中的变量 普通局部变量:定义时直接定义,或者在前面加上(auto)关键字 void func1(void) { int i = 1; i ++; printf(“i = %d\n”,i); } 局部变量i的解析:在连续三次调用func1,...
  • 静态变量静态变量使用 static 修饰符进行声明在所属类被装载时创建通过类进行访问所属类的所有实例的同一静态变量都是同一个值非静态变量:不带有 static 修饰符声明的变量称做非静态变量在类被实例化时创建通过...
  • Ⅰ、简单的入门: ①、//代码摘下直接可以运行 //静态变量的练习 ... //动态变量 static int c=3;//静态变量 b++;c++; return printf(“a=%d b=%d c=%d\na+b+c=%d\n”,a,b,c,a+b+c); } int main() { ...
  • 静态变量与普通变量

    2012-11-27 16:51:56
    静态变量是在堆分配的,而普通变量是在栈上分配的,栈上分配的变量是动态的,可以实现重用,而堆上分配的变量是不能实现重用。还有普通变量可以实现多次初始化,而静态变量只能初始化一次。”
  • C++静态变量(static)与动态变量

    千次阅读 2019-01-27 23:50:51
    #include "stdafx.h" #include &...//静态局部变量,具有全局寿命,局部作用域,只在第一次进入函数时被初始化 int c=10;//局部变量,每次进入函数时都初始化 cout&lt;&...

空空如也

空空如也

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

静态变量与动态变量