-
2019-01-23 13:14:33
动态变量和静态变量的定义和区别如下:
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 }
更多相关内容 -
静态变量与动态变量
2018-08-02 20:21:100.静态存储与动态存储 1)静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。静态变量,全局动态变量都是静态存储 2)动态存储变量是在程序执行过程中,使用它时才分配存储单元,...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语言动态变量和静态变量的区别
2017-11-27 20:21:00静态变量,就是在定义的时候,有static 修饰的变量,形式为static TYPE var_name = init_value;而动态变量,形式为TYPE var_name = init_value;即没有static 修饰。其中的=init_value均可省略。区分定义在函数外的...静态变量,就是在定义的时候,有static 修饰的变量,形式为
static TYPE var_name = init_value;
而动态变量,形式为
TYPE var_name = init_value;
即没有static 修饰。其中的=init_value均可省略。
区分定义在函数外的全局变量,和函数内的局部变量,作用域,生命周期,及无显式初始化时的初始值,均有区别。
1 动态全局变量:
作用域为整个项目,即最终编译成可执行文件的所有文件中均可以使用动态全局变量。
生命周期为从程序运行到程序退出,即贯穿整个运行时间。
无显式初始化时默认初始化值为0。
2 静态全局变量:
作用域为当前文件,从定义/声明位置到文件结尾。
生命周期为从程序运行到程序退出,即贯穿整个运行时间。
无显式初始化时默认初始化值为0。
3 动态局部变量:
作用域为当前函数,从定义位置,到其所在的{}的结束位置。
生命周期为从函数调用到函数退出。
无显式初始化时默认初始化值为随机值。
4 静态局部变量:
作用域为当前函数,从定义位置,到其所在的{}的结束位置。
生命周期为从程序运行到程序退出,即贯穿整个运行时间,当下次函数调用时,静态局部变量不会被再次初始化,而是沿用上次函数退出时的值。
无显式初始化时默认初始化值为0。 -
C语言 动态变量和静态变量的区别
2018-11-07 22:23:24转 C语言动态变量和静态变量的区别 2017年11月27日 20:21:00 guosir_ 阅读数:1586 &amp;amp;amp;amp;amp;amp;amp;lt;span class=&...静态变量,就是在定义的时候,有static 修饰的变量,形式为:static type var_name = init_value;
动态变量,形式为:type var_name = init_value; 即没有static 修饰。其中的=init_value均可省略。
区分定义在函数外的全局变量,和函数内的局部变量,作用域,生命周期,及无显式初始化时的初始值,均有区别。1 动态全局变量:
作用域为整个项目,即最终编译成可执行文件的所有文件中均可以使用动态全局变量。
生命周期为从程序运行到程序退出,即贯穿整个运行时间。
无显式初始化时默认初始化值为0。2 静态全局变量:
作用域为当前文件,从定义/声明位置到文件结尾。
生命周期为从程序运行到程序退出,即贯穿整个运行时间。
无显式初始化时默认初始化值为0。3 动态局部变量:
作用域为当前函数,从定义位置,到其所在的{}的结束位置。
生命周期为从函数调用到函数退出。
无显式初始化时默认初始化值为随机值。4 静态局部变量:
作用域为当前函数,从定义位置,到其所在的{}的结束位置。
生命周期为从程序运行到程序退出,即贯穿整个运行时间,当下次函数调用时,静态局部变量不会被再次初始化,而是沿用上次函数退出时的值。
无显式初始化时默认初始化值为0。 -
全局变量与局部变量,静态变量与动态变量,内部函数与外部函数的区别
2020-06-16 10:15:28一、变量按作用域范围分类 局部变量:在函数内定义的变量,作用域限于函数内。 说明:(1)主函数定义的变量不能再其他函数中使用,主函数也不能使用其他函数定义的变量。 (2)形参变量属于被调函数的局部变量,... -
【C语言】-- 动态变量和静态变量的区别
2020-08-14 07:51:36变量的存储类别分有自动(动态)、静态、寄存器和外部四种,下面来说明动态和静态变量的区别。 自动(动态)变量:函数中的局部变量不加static关键字修饰就是动态变量。每次调用该函数的时,系统会给它分配存储... -
静态库和动态库里的全局变量(或类的静态成员变量)共享和独立的问题
2012-11-01 15:10:42在A中定义有全局变量X(或类的静态成员变量),则在动态库B中访问的X,与可执行程序C中访问的X是同一个变量还是两个不同的变量? 答案:是两个不同的变量。 2. 工程中包含动态库A,动态库B,可执行程序C。C依赖于A和... -
动态变量和静态变量的区别
2015-10-03 10:13:01动态变量和静态变量的区别:1、存储位置动态变量:存储在内存出栈数据区静态变量:存储在全局数据区(静态数据区)2、生命期动态变量:根据你定义的位置确定,比如你在一个函数中定义的,那么超出该函数范围变量将... -
C语言局部变量,全局变量,静态变量,动态变量的区别与联系
2020-02-04 21:57:36变量与常量 变量:指的是在程序运行过程中,可以通过代码使他的值改变的量。 常量:程序运行过程中不会改变的量。 局部变量 局部变量:定义在函数中的变量。 全局变量 全局变量:定义在函数外面的变量。 #... -
c++全局变量与静态变量
2019-03-29 19:12:12全局变量和和由static修饰的静态变量都被储存在全局数据区。全局数据区的内存在程序运行时会被全部置'0'.这不同于局部变量,局部变量在栈上分配内存,但此块内存一般不为零,且编译器不会在局部变量被声明的地方为其... -
全局变量、局部变量、静态全局变量、静态局部变量的区别(与常见面试基础题)
2019-10-04 18:23:00局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量... -
动态库中的全局变量与静态变量
2020-03-10 10:28:04写一个so,该so中有一个全局变量。so中的代码在运行时会修改该全局变量的值。然后,有多个程序都需要该so,而且这些应用程序都启动了。此时,很显然so只被加载了一份,那么,当这么多程序在运行调用该so时,该so中的... -
静态变量与静态函数
2018-08-16 10:42:50堆与栈 ...3、全局区(static):全局变量和静态变量的存储,有系统释放; 4、文字常量区:常量字符串存放,系统释放; 5、程序代码区:存放函数体的二进制代码。 堆与栈的区别: 1.栈内存存... -
静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)
2019-11-26 17:53:17区分静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)变量的分类来看 静态变量、动态变量、内部变量(局部变量)、外部变量(全局... -
动态变量与静态变量的区别
2009-09-08 09:15:00而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放。 2 为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后... -
Systemverilog 静态变量 (static) 与 动态变量(automatic) 区别
2021-11-23 22:46:21此章节主要包括静态变量与动态变量的区别,两者在verilog与systemverilog的不同,同时举3个实际例子,说明Systemverilog的内嵌初始化 一、静态变量和动态变量的定义 自动变量:也可以动态变量,变量的存储区在... -
c语言局部变量 静态局部变量 全局变量与静态全局变量
2019-05-23 19:33:01数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的。 栈(stack):先进后出。C语言中局部变量就分配在栈中。 局部变量 普通的局部变量定义的时候直接定义或者在... -
变量的属性(全局变量、局部变量、动态变量、静态变量等)
2018-04-15 17:18:25原博主:...l 根据生存周期:可分为静态存储方式和动态存储方式,具体地又分为自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。静态存储方式是指在... -
详解全局变量,全局变量与静态变量的区别
2020-06-27 23:00:26一个程序在内存中占用的存储空间可以分为3个部分:程序区(存放可执行程序的代码)、静态存储区(存放静态变量)、动态存储区(存放动态变量)。 ③ 优先度:全局变量优先度低于局部变量 当全局变量和局部变量重名时... -
成员变量、类变量和静态变量三者的区别
2019-08-17 19:16:36实例变量(成员变量) 在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。 当一个对象被实例化之后,每个实例变量的值就跟着确定; 实例变量在对象... -
动态变量和静态变量的区别(存储位置、生命周期、作用域)
2019-01-23 13:21:06动态变量和静态变量的区别: 1、存储位置 动态变量:存储在内存出栈数据区 静态变量:存储在全局数据区(静态数据区) 2、生命期 动态变量:根据你定义的位置确定,比如你在一个函数中定义的,那么超出该函数... -
C++静态变量(static)与动态变量
2019-01-27 23:50:51#include "stdafx.h" #include &...//静态局部变量,具有全局寿命,局部作用域,只在第一次进入函数时被初始化 int c=10;//局部变量,每次进入函数时都初始化 cout<&... -
描述一下普通局部变量,普通全局变量,静态局部变量,静态全局变量的区别
2021-03-08 19:15:28静态局部变量 存在全局区 不初始化内容为0 整个进程结束空间释放 只能在定义所在的复合语句中有效 静态全局变量 存在全局区 不初始化内容为0 整个进程结束空间释放 只能在当前源文件中使用 ... -
静态局部变量和动态局部变量区别
2020-05-13 10:03:05静态局部变量和动态局部变量区别: 1.静态局部变量属于静态存储类别,在静态存储区分配存储单元,在整个运行期间都不释放。 而自动变量(动态局部变量)属于动态存储类别,占动态存储空间,函数调用后释放 2.静态局部... -
关于静态局部变量与静态外部变量
2017-11-09 19:14:101:静态局部变量存储在静态存储区,如果赋有初值,函数调用期间只赋值一次,下次调用该函数时,静态局部变量值为上次调用之后的结果,原因:静态局部变量在函数调用期间是不释放的;而自动变量在每次调用函数时都会... -
全局变量和静态全局变量动态和静态的差别
2018-09-21 16:01:07全局静态变量是显式用static修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用extern声明也不能使用。 拓展资料 全局变量也称为外部变量,它是在 函数外部定义的变量。 它不属于哪一... -
C语言中的变量(自动变量 静态变量 外部变量 寄存器变量)
2021-12-20 15:26:08变量的存储类别分有自动(动态),静态,寄存器和外部四种。 auto 自动变量 static 静态存贮分配变量(又分为内部静态和外部静态) extren 外部变量/全程变量(用于外部变量说明) ...静态变量: 全局 -
局部变量,全局变量(外部变量),静态局部变量,静态全局变量
2018-03-20 16:59:43今天被问到了一个问题:如何让请求的类延迟释放如果要延迟释放或者在程序整个生命周期都存在可以考虑两种方式,一是定义一个静态变量,二是用单例。用单例本质上用的是静态变量。单例的写法如下:+ (instancetype)... -
局部变量、全局变量和静态变量之间的区别
2021-01-23 11:37:22局部变量、全局变量和静态变量之间的区别 (1)局部变量 定义: 在一个函数内部定义的变量是局部变量,它只在本函数范围内有效。 1.主函数main定义的变量也只在主函数有效; 2.不同函数中可以使用名字相同的变量,...