网站显示图片标记,湖南省建设信息网,wordpress数据库更改密码,门户网站建设申请0.静态存储与动态存储 1#xff09;静态存储变量通常是在变量定义时就分定存储单元并一直保持不变#xff0c;直至整个程序结束。静态变量#xff0c;全局动态变量都是静态存储
2#xff09;动态存储变量是在程序执行过程中#xff0c;使用它时才分配存储单元#xff0c…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呢为什么不是01234呢
这是因为在函数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中全局变量局部变量静态变量和常量 ———————————————— 原文链接https://blog.csdn.net/qq_33757398/article/details/81365475