×

静态变量的作用域

静态变量的作用域(C语言动态变量和静态变量的区别)

admin admin 发表于2023-02-24 14:59:49 浏览33 评论0

抢沙发发表评论

本文目录

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


一、形式不同:

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

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

二、作用不同:

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

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

常量使用

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

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

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


静态局部变量的作用域是()生存期是()


静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量,退出该函数后,尽管该变量还继续存在,但不能使用它。  

静态变量与之相对应的是在运行时只暂时存在的自动变量(即局部变量)与以动态分配方式获取存储空间的一些对象,其中自动变量的存储空间在调用栈上分配与释放。

扩展资料:

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

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

参考资料来源:

百度百科-静态变量


静态全局变量和全局变量有什么区别


全局变量是不显式用static修饰的全局变量,但全局变量默认是动态的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。全局静态变量是显式用static修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用extern声明也不能使用。

拓展资料

全局变量也称为外部变量,它是在 函数外部定义的变量。 它不属于哪一个 函数,它属于一个源程序文件。其作用域是从定义该变量的位置开始至源文件结束。

全局变量是在所有函数体的外部定义的,程序的所在部分(甚至其它文件中的代码)都可以使用。全局变量不受作用域的影响(也就是说,全局变量的生命期一直到程序的结束)。如果在一个文件中使用 extern关键字来声明另一个文件中存在的全局变量,那么这个文件可以使用这个数据。

在全局变量前加一个 static,使该变量只在这个源文件中可用,称之为全局静态变量,全局静态变量就是静态全局变量。

在多文件组成的程序里,全局变量与全局静态变量是不同的。在某一层次声明的变量的作用域就终止于该变量所在层次的末尾。唯一的区别是全局静态变量使得该变量成为定义该变量的源文件所独享。如果在一个文件中使用 extern关键字来声明另一个文件中存在的静态全局变量,这个文件也不能够使用这个数据。


什么是静态变量,静态变量=全局变量,动态变量=局部变量吗


非也。
动态局部变量:静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放。
静态局部变量:静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后,
尽管该变量还继续存在,但不能使用它。
动态全局变量:全局作用域,整个程序都可以使用。
静态全局变量:静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。

静态变量的作用域


那要看你在哪里定义的了,如果在函数内定义的那么作用域就在该函数中,若是在函数外定义的那它的作用域就在整个程序中;
文件指的就是一个c程序文件,比如在开始写程序的时候 #ingclude《 stdio.h》 或#include《math》中 stdio.h和
math.h就是文件名。
文件里面包含了多个函数,这样我们在写程序的时候就可以直接调用里面的函数而不用再定义了。比如printf 和
scanf等常用的函数。

静态变量的作用域是整个文件吗


你指的是不是C语言?
对于C语言,静态变量也分全局静态变量和局部静态变量,对于全局静态变量,它的作用域是整个文本。
但是如果是局部静态变量则它的作用域仅仅是定义它的区域。
比如test.c有g_u32_test和testVar两个全局静态变量
static int g_u32_test = 0;//这个变量的作用于是整个test.c void testFun(void)
{
static int testVar = 0;//这个变量的作用于仅在testFun函数
g_u32_test ++;
}void testFun2(void)
{
//testVar = 2; //这里访问testVar会提示未定义
}
如果在另一个c文件比如main.c中访问g_u32_test也会出错。但在test.c的其它函数却可以调用它。

全局变量跟静态变量有什么不一样


了解变量的关键在于“存在范围”和“作用域”两个概念。
“存在范围”指存储变量的内存空间在什么时间段内存在。全局变量和静态变量都是在程序运行之始就产生,运行结束才销毁,是一样的。
“作用域”指变量在什么时间段内可见,即可以被识别。全局变量的作用域是整个程序运行过程,静态变量的作用域是声名该变量的局部函数内。在总程序内和这个函数外,静态变量虽然存在,但写下变量名时编译器却不认识,这是区别。
关键在于了解存在和可见的区别。

静态与动态变量导致变量作用域不同吗


当然不。
作用域取决于声明的位置和声明符。静态变量的作用域也不例外。
但静态变量不因过程重新执行而初始化,动态变量会因所在的过程或模块重新加载而初始化。他们的生命周期不同。
这里一个是空间概念(作用域),另一个是时间概念(动态/静态)。

c语言中静态变量是怎么用的


c语言中静态变量作常量使用,用于存储常数。可用const,constant或final等关键字标识,其值就会在编译时设定,并且无法在运行时改变。编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区;而如若有需要,有些编译器还可选择为其开辟专用区。

对于静态全局变量来说,针对某一源文件的以static声明的文件级变量与函数的作用域只限于文件内(只在文件内可见),也即“内部连接”,因而可以用来限定变量的作用域。

扩展资料:

在函数内以static声明的静态局部变量虽然与自动局部变量的作用域相同(即作用域都只限于函数内),但存储空间是以静态分配而非默认的自动分配方式获取的,因而存储空间所在区域不同。

一般来说,静态分配时存储空间于编译时在程序数据段分配,一次分配全程有效;而自动分配时存储空间则是于调用栈上分配,只在调用时分配与释放,且两次调用间变量值始终保持一致;必须注意,静态局部变量只能初始化一次,这是由编译器来保证实现。