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

如题

一、形式不同:

静态变量是在定义的时候,有static 修饰的变量,形式为static TYPE var_name = init_value;

动态变量,形式为TYPE var_name = init_value;即没有static 修饰,其中的=init_value均可省略。

二、作用不同:

动态全局变量:作用域为整个项目,即最终编译成可执行文件的所有文件中均可以使用动态全局变量,生命周期为从程序运行到程序退出,即贯穿整个运行时间。

静态全局变量:作用域为当前文件,从定义/声明位置到文件结尾,生命周期为从程序运行到程序退出,即贯穿整个运行时间。

常量使用

静态变量也可以用于存储常数。具体来说,静态变量(全局变量及汇编语言里定义的符号亦同)可用const,constant或final(根据语言决定)等关键字标识,这时其值就会在编译时设定,并且无法在运行时改变。

编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区;而如若有需要,有些编译器还可选择为其开辟专用区;为防止常数变量被错误的指针写入覆盖,亦可在这块区域启用内存保护机制。

以上内容参考:百度百科-静态变量

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-10-15
静态变量,就是在定义的时候,有static 修饰的变量,形式为
static TYPE var_name = init_value;
而动态变量,形式为
TYPE var_name = init_value;
即没有static 修饰。其中的=init_value均可省略。
区分定义在函数外的全局变量,和函数内的局部变量,作用域,生命周期,及无显式初始化时的初始值,均有区别。
1 动态全局变量:
作用域为整个项目,即最终编译成可执行文件的所有文件中均可以使用动态全局变量。
生命周期为从程序运行到程序退出,即贯穿整个运行时间。
无显式初始化时默认初始化值为0。

2 静态全局变量:
作用域为当前文件,从定义/声明位置到文件结尾。
生命周期为从程序运行到程序退出,即贯穿整个运行时间。
无显式初始化时默认初始化值为0。

3 动态局部变量:
作用域为当前函数,从定义位置,到其所在的{}的结束位置。
生命周期为从函数调用到函数退出。
无显式初始化时默认初始化值为随机值。

4 静态局部变量:
作用域为当前函数,从定义位置,到其所在的{}的结束位置。
生命周期为从程序运行到程序退出,即贯穿整个运行时间,当下次函数调用时,静态局部变量不会被再次初始化,而是沿用上次函数退出时的值。
无显式初始化时默认初始化值为0。本回答被网友采纳
第2个回答  推荐于2017-09-13
全局变量声明之前加上static,就是静态全局变量。全局变量和静态全局变量都是静态存储的;在存储上无区别。区别在于他们的作用域;全局变量的作用域是整个源程序,当源程序有多个源文件组成时,全局变量在各个源程序文件都是有效的;而静态全局变量怎被限制了作用域,只在定义该变量的源文件内有用在同一程序的其他源文件不能使用!
还有静态全局变量只初始化一次,防止在其他源文件调用!而全局变量可以再其他源文件初始化!!本回答被提问者采纳
第3个回答  2010-08-02
最大的区别就是静态变量在其作用域里的值会有一个储存空间,而这个空间在程序结束之前是不会被删除的,所以静态变量在执行程序时会保留前一次执行的值,也就是只能被初始化一次。而动态变量是可以一直处于赋值语句中。
第4个回答  2021-05-18
建议看英文教材,翻译的东西增加理解障碍,英语的重要性就在这里。
动态变量就是函数内部定义的变量,internal variables,auto variables. 作用域限制在函数内部,生命周期就是函数结束,变量就销毁了。再次调用该函数,变量是重新生成的。函数内定义的静态static变量,作用域还是函数内部,生命周期是整个程序的运行和结束,该变量一直存在,每次调用该函数,只是保持变量值的更新。函数内部的static改变的是生命周期。
全局变量,external variables, 作用域是整个程序。external static variables 是作用域被限制到了本源文件内,在其他源文件不可见。函数外部变量,也就是全局变量,static改变的是作用域。
翻译的名称很容易让人困惑。当然你理解了,不存在障碍,但是在你没理解的时候,这些名称是让人增加困惑的。