- 小菜G的建站之路
-
不太严格的说,可以这么认为。
因为全局变量和静态变量在内存里是储存在一个地方的。叫
data
segment
(数据段),静态区。意思是这个地方的数据的生命周期是不变的,只要程序本身在运行,他们就会存在。所以说他们都存在同一片区域内。
你能想到
静态变量
和
全局变量
在使用的时候有什么区别吗?唯一的区别就是对于多个文件的访问权限,static
的变量只对本文件有效,而全局变量(除去const)对当前所有文件有效。main.cpp
可以访问
foo.cpp
的全局变量,而不能访问
foo.cpp
的静态变量。
既然他们存在一个地方,如何区分呢。通过变量的
linkage
(即能否被链接器识别)属性,internal
linkage
的变量只能被本文件访问,而
external
linkage
的变量可以被其他文件访问。就这个层面而言,你的想法不能说有错。
静态全局变量和全局变量有什么区别
在全局变量前加一个static,使该变量只在这个源文件中可用,称之为全局静态变量,全局静态变量就是静态全局变量。1.全局变量也称为外部变量,它是在函数外部定义的变量。 它不属于哪一个函数,它属于一个源程序文件。其作用域是从定义该变量的位置开始至源文件结束。2.全局变量是在所有函数体的外部定义的,程序的所在部分(甚至其它文件中的代码)都可以使用。全局变量不受作用域的影响(也就是说,全局变量的生命期一直到程序的结束)。如果在一个文件中使用extern关键字来声明另一个文件中存在的全局变量,那么这个文件可以使用这个数据。3.在全局变量前加一个static,使该变量只在这个源文件中可用,称之为全局静态变量,全局静态变量就是静态全局变量。2023-06-06 08:01:595
全局变量和静态全局变量有什么区别?
全局变量前面有没有static表明该变量是否具有外部链接,1-3楼说的很清楚了 tatng803397说的情况是类,结构或者函数内部的static变量2023-06-06 08:02:305
什么是静态变量,静态变量=全局变量,动态变量=局部变量吗??
简单来说,静态变量就是一个变量名称前有static标注的比如说 static int a;全局变量等于静态变量,他们的差别你可以简单理解成在作用域上的差别,静态变量是在一个函数中的作用域(主函数就是主函数作用域,局部函数就是局部函数的作用域),而全局函数是写在主函数外的(非局部函数中)空白处的变量,其生命期在主函数之前即产生,随着主函数运行完数据再有系统回收而动态变量与静态变量的差别是例如void a(){static int i=0; //静态i++;}void b(){ int i=0; //动态i++;}动态变量就是,每一次调用完系统回收内存,下一次调用再分配内存,而静态变量的生命期会在主函数运行结束后内存才会被系统收回2023-06-06 08:02:442
静态全局变量和全局变量有什么区别
全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。static函数与普通函数有什么区别?只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。2023-06-06 08:02:511
什么是静态变量
他便靓,净量变量是三对对他来说的,他那个冰箱是有些有变动,有一些不需要并2023-06-06 08:03:008
static全局变量与普通的全局变量有什么区别
首先理解static是啥意思,static是静态变量,类加载的时候就存在于虚拟机中,多个对象共用static变量,而普通的全局变量是属于类的,也就是每个对象都有各自的那个变量,是对象私有的东西2023-06-06 08:03:152
静态变量和局部变量和全局变量的区别
1.从作用域看:C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。1>全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量。2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。3>局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。4>静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。2.从分配内存空间看:1>全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间2>全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。1)全局变量、静态全局变量以及静态局部变量都会被放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它们与堆变量、堆变量的区别。2)静态变量(包括静态局部变量和静态全局变量)用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static这个说明符在不同的地方所起的作用是不同的。应予以注意。Tips:A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题,因为他们都放在静态数据存储区,全局可见;D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。2023-06-06 08:03:221
静态变量是属于:A.全局变量.B.局部变量C.可变变量D常量
fcccccccccccccccccccccccc2023-06-06 08:03:294
static静态局部变量和静态全局变量的区别详解
一、静态局部变量:1、static类型的内部变量同auto自动变量(即未加 static 声明的局部变量)一样,是某个特定函数的局部变量,即只能在定义该变量的函数内使用该变量,两者作用域相同;两者的不同在于:auto自动变量会随着函数被调用和退出而存在和消失,而static类局部变量不会,它不管其所在的函数是否被调用,都将一直存在;不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。换言之,static类型的内部变量是一种只能在某个特定函数中使用,但一直占据存储空间的变量。2、函数体内如果在定义静态变量的同时进行了初始化,则以后程序不再进行初始化操作(出现在函数内部的基本类型的的静态变量初始化语句只有在第一次调用才执行)。而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。3、静态局部变量的初始化表达式必须是一个常量或者常量表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。而对自动变量auto来说,如果不赋初值则它的值将是个不确定的值。4、当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用(主要是变量的作用域造问题成的),因此仍以采用局部静态变量为宜。注:局部静态变量占用内存时间较长,并且可读性差,因此,除非必要,尽量避免使用局部静态变量。二、静态全局变量全局变量(外部变量)的声明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。static静态局部变量和静态全局变量区别这两者的区别在于:1、非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。2、静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。从以上分析可以看出————把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。static静态变量会被放在程序的全局存储区中(即在程序的全局数据区,而不是在堆栈中分配,所以不会导致堆栈溢出),这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。2023-06-06 08:03:471
静态的全局变量和非静态的全局变量有什么区别
全局变量与全局静态变量的区别: (a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。 (b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。 (c)具有外部链接的静态;可以在所有源文件里调用;除了本文件,其他文件可以通过extern的方式引用;静态全局变量的作用: (a)不必担心其它源文件使用相同变量名,彼此相互独立。(b)在某源文件中定义的静态全局变量不能被其他源文件使用或修改。 (c) 只能在本文件中使用!具有内部链接的静态;不允许在其他文件里调用;2023-06-06 08:03:541
局部静态变量 全局静态变量的区别
作用域咯在函数外声明的变量,其作用域是从声明处到文件结束,在这个区域内的每一个函数都可以访问这个变量。而在函数内声明的变量,只有在这个函数之内才能访问2023-06-06 08:04:001
全局变量是静态变量吗
在c#下没有全部变量的概念,但可以通过使用类的静态变量来实现相同的效果2023-06-06 08:04:084
静态局部变量与全局变量问题
就算它不是静态变量,return的值也是它,这就要看局部变量的作用域了。2023-06-06 08:04:164
C++ 全局变量和全局静态变量有什么区别?
1. 全局变量的作用域是整个项目,它只需要在一个源文件中定义就可以作用于所有的源文件,其它不包括全局变量定义的文件需要用extern关键字再次声明这个全局变量。2. 全局变量、静态全局变量、静态局部变量都是在静态存储区(全局数据区)中分配空间的,而局部变量是在栈上分配空间的。3. 全局变量、静态变量的生命期和程序生命期是一样的,在程序结束之后操作系统会回收空间。变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如Haskell)中,变量可能是不可变(immutable)的。在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中);但另外一些语言可能使用其它概念(如C的对象)来指称这种抽象,而不严格地定义“变量”的准确外延。2023-06-06 08:04:231
全局变量,静态全局变量,静态局部变量和局部变量的区别1
局部变量与其它三个有本质区别。 局部变量,定义在函数内,作用域为定义位置,到所在大括号结束。 每次执行到定义语句的时候,系统为该变量分配内存,当作用域结束后,内存被释放。而另外三个,都是在系统运行时就分配内存,在运行过程中都不会释放,直到程序结束。也就是说,局部变量和其它三个,最明显的区别:1 生命周期不同2 分配时间不同3 分配位置不同。而另外三个,在这几项上是相同的,之间的区别在于作用域。全局变量,作用域为整个项目,不管在哪个文件中,只要声明后都可以使用。静态全局变量,作用域为定义改变量的所在文件。而静态局部变量,作用域与普通局部变量一样,都是定义位置到所在大括号结束。2023-06-06 08:04:362
c语言,全局静态变量是不是就是全局变量静态储存?
不太严格的说,可以这么认为。因为全局变量和静态变量在内存里是储存在一个地方的。叫datasegment(数据段),静态区。意思是这个地方的数据的生命周期是不变的,只要程序本身在运行,他们就会存在。所以说他们都存在同一片区域内。你能想到静态变量和全局变量在使用的时候有什么区别吗?唯一的区别就是对于多个文件的访问权限,static的变量只对本文件有效,而全局变量(除去const)对当前所有文件有效。main.cpp可以访问foo.cpp的全局变量,而不能访问foo.cpp的静态变量。既然他们存在一个地方,如何区分呢。通过变量的linkage(即能否被链接器识别)属性,internallinkage的变量只能被本文件访问,而externallinkage的变量可以被其他文件访问。就这个层面而言,你的想法不能说有错。2023-06-06 08:04:441
全局变量都是静态存储吗
是的 全局变量都是静态存储2023-06-06 08:04:522
c语言中什么是静态变量,什么是动态变量?
全局变量声明之前加上static,就是静态全局变量。全局变量和静态全局变量都是静态存储的;在存储上无区别。区别在于他们的作用域;全局变量的作用域是整个源程序,当源程序有多个源文件组成时,全局变量在各个源程序文件都是有效的;而静态全局变量怎被限制了作用域,只在定义该变量的源文件内有用在同一程序的其他源文件不能使用!还有静态全局变量只初始化一次,防止在其他源文件调用!而全局变量可以再其他源文件初始化!!2023-06-06 08:05:001
局部变量,局部静态变量,全局变量,全局静态变量分别存放在哪个区?
全局变量静态变量存放在静态全局存储区函数代码区自动变量栈区2023-06-06 08:05:182
怎样将一个类的成员变量声明为静态全局变量?
让b 继承 a 就可以了2023-06-06 08:05:253
C语言中 在一个函数中用 static修饰的变量,还能给它赋上新值吗?
当然能了2023-06-06 08:05:337
php中static 静态变量和普通变量的区别
1、在变量的前面加上static 就构成了静态变量(static 变量)。2、static变量和普通变量的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。3、static变量和普通变量的区别:static全局变量与普通全局变量区别:static全局变量只初使化一次,防止在其他文件单元中被引用;static局部变量和普通局部变量区别:static局部变量只被初始化一次,下一次依据上一次结果值;static函数与普通函数区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。4、在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。5、static 变量的好处:不会被其他文件所访问,修改其他文件中可以使用相同名字的变量,不会发生冲突。内存中的位置:静态存储区初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。 注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。当static用来修饰全局变量的时候,它就改变了全局变量的作用域(在声明他的文件之外是不可见的),但是没有改变它的存放位置,还是在静态存储区中。2023-06-06 08:05:542
static全局变量与普通的全局变量有什么区别
全局变量与全局静态变量的区别:(a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。(b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该2023-06-06 08:06:001
static定义静态变量的值可以改变吗
静态值可以改变(C)以下是我百度的..解释很直观静态全局变量有以下特点: 该变量在全局数据区分配内存; 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化); 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;2023-06-06 08:06:202
static变量存储在哪里
该变量在全局数据区分配内存; 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化); 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的; 静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的 代码区,全局数据区,堆区,栈区 一般程序的由new产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。细心的读者可能会发现,Example 1中的代码中将 static int n; //定义静态全局变量 改为 int n; //定义全局变量 程序照样正常运行。 的确,定义全局变量就可以实现变量在文件中的共享,但定义静态全局变量还有以下好处: 静态全局变量不能被其它文件所用; 其它文件中可以定义相同名字的变量,不会发生冲突;2023-06-06 08:06:281
c++中关于私有静态变量的问题
C++的static关键字 C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下://Example 1#include <iostream.h>void fn();static int n; //定义静态全局变量void main(){ n=20; cout<<n<<endl; fn();}void fn(){ n++; cout<<n<<endl;}静态全局变量有以下特点:该变量在全局数据区分配内存; 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化); 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的; 静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的分布情况如下图: 代码区 全局数据区 堆区 栈区 一般程序的由new产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。细心的读者可能会发现,Example 1中的代码中将 static int n; //定义静态全局变量改为 int n; //定义全局变量程序照样正常运行。的确,定义全局变量就可以实现变量在文件中的共享,但定义静态全局变量还有以下好处:静态全局变量不能被其它文件所用; 其它文件中可以定义相同名字的变量,不会发生冲突; 您可以将上述示例代码改为如下://Example 2//File1#include <iostream.h>void fn();static int n; //定义静态全局变量void main(){ n=20; cout<<n<<endl; fn();}//File2#include <iostream.h>extern int n;void fn(){ n++; cout<<n<<endl;}编译并运行Example 2,您就会发现上述代码可以分别通过编译,但运行时出现错误。试着将 static int n; //定义静态全局变量改为 int n; //定义全局变量再次编译运行程序,细心体会全局变量和静态全局变量的区别。2、静态局部变量在局部变量前,加上关键字static,该变量就被定义成为一个静态局部变量。 我们先举一个静态局部变量的例子,如下: //Example 3#include <iostream.h>void fn();void main(){ fn(); fn(); fn();}void fn(){ static n=10; cout<<n<<endl; n++;} 通常,在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。 但有时候我们需要在两次调用之间对变量的值进行保存。通常的想法是定义一个全局变量来实现。但这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。 静态局部变量正好可以解决这个问题。静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。静态局部变量有以下特点:该变量在全局数据区分配内存; 静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化; 静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0; 它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束; 3、静态函数 在函数的返回类型前加上static关键字,函数即被定义为静态函数。静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其它文件使用。静态函数的例子: //Example 4#include <iostream.h>static void fn();//声明静态函数void main(){ fn();}void fn()//定义静态函数{ int n=10; cout<<n<<endl;}定义静态函数的好处:静态函数不能被其它文件所用; 其它文件中可以定义相同名字的函数,不会发生冲突; 二、面向对象的static关键字(类中的static关键字)1、静态数据成员在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员。先举一个静态数据成员的例子。 //Example 5#include <iostream.h>class Myclass{public: Myclass(int a,int b,int c); void GetSum();private: int a,b,c; static int Sum;//声明静态数据成员};int Myclass::Sum=0;//定义并初始化静态数据成员Myclass::Myclass(int a,int b,int c){ this->a=a; this->b=b; this->c=c; Sum+=a+b+c;}void Myclass::GetSum(){ cout<<"Sum="<<Sum<<endl;}void main(){ Myclass M(1,2,3); M.GetSum(); Myclass N(4,5,6); N.GetSum(); M.GetSum();}可以看出,静态数据成员有以下特点:对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷贝,由该类型的所有对象共享访问。也就是说,静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共用。所以,静态数据成员的值对每个对象都是一样的,它的值可以更新; 静态数据成员存储在全局数据区。静态数据成员定义时要分配空间,所以不能在类声明中定义。在Example 5中,语句int Myclass::Sum=0;是定义静态数据成员; 静态数据成员和普通数据成员一样遵从public,protected,private访问规则; 因为静态数据成员在全局数据区分配内存,属于本类的所有对象共享,所以,它不属于特定的类对象,在没有产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它; 静态数据成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式为:<数据类型><类名>::<静态数据成员名>=<值> 类的静态数据成员有两种访问形式:<类对象名>.<静态数据成员名> 或 <类类型名>::<静态数据成员名>如果静态数据成员的访问权限允许的话(即public的成员),可在程序中,按上述格式来引用静态数据成员 ; 静态数据成员主要用在各个对象都有相同的某项属性的时候。比如对于一个存款类,每个实例的利息都是相同的。所以,应该把利息设为存款类的静态数据成员。这有两个好处,第一,不管定义多少个存款类对象,利息数据成员都共享分配在全局数据区的内存,所以节省存储空间。第二,一旦利息需要改变时,只要改变一次,则所有存款类对象的利息全改变过来了; 同全局变量相比,使用静态数据成员有两个优势: 静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其它全局名字冲突的可能性; 可以实现信息隐藏。静态数据成员可以是private成员,而全局变量不能;2、静态成员函数 与静态数据成员一样,我们也可以创建一个静态成员函数,它为类的全部服务而不是为某一个类的具体对象服务。静态成员函数与静态数据成员一样,都是类的内部实现,属于类定义的一部分。普通的成员函数一般都隐含了一个this指针,this指针指向类的对象本身,因为普通成员函数总是具体的属于某个类的具体对象的。通常情况下,this是缺省的。如函数fn()实际上是this->fn()。但是与普通函数相比,静态成员函数由于不是与任何的对象相联系,因此它不具有this指针。从这个意义上讲,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数。下面举个静态成员函数的例子。 //Example 6#include <iostream.h>class Myclass{public: Myclass(int a,int b,int c); static void GetSum();/声明静态成员函数private: int a,b,c; static int Sum;//声明静态数据成员};int Myclass::Sum=0;//定义并初始化静态数据成员Myclass::Myclass(int a,int b,int c){ this->a=a; this->b=b; this->c=c; Sum+=a+b+c; //非静态成员函数可以访问静态数据成员}void Myclass::GetSum() //静态成员函数的实现{// cout<<a<<endl; //错误代码,a是非静态数据成员 cout<<"Sum="<<Sum<<endl;}void main(){ Myclass M(1,2,3); M.GetSum(); Myclass N(4,5,6); N.GetSum(); Myclass::GetSum();}关于静态成员函数,可以总结为以下几点:出现在类体外的函数定义不能指定关键字static; 静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数; 非静态成员函数可以任意地访问静态成员函数和静态数据成员; 静态成员函数不能访问非静态成员函数和非静态数据成员; 由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长; 调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以直接使用如下格式:<类名>::<静态成员函数名>(<参数表>)调用类的静态成员函数。2023-06-06 08:06:423
在函数外部定义的变量称为( )变量
在函数外部定义的变量称为全局变量。带static的是静态全局变量, 作用域为当前文件。不带static的是全局变量, 作用域为整个程序。所有全局变量的生命周期都是整个程序运行。扩展资料:全局变量、静态局部变量、静态全局变量都在静态存储区分配空间,而局部变量在栈分配空间。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上没有什么不同。区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其他源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。1、静态变量会被放在程序的静态数据存储区里,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是他与堆栈变量和堆变量的区别2、变量用static告知编译器,自己仅仅在变量的作用域范围内可见。这一点是他与全局变量的区别。2023-06-06 08:07:081
为什么静态方法中不能调用非静态的全局变量
在java中,静态方法只能调用静态变量,如果你想要在静态方法调用一个变量,那么这个变量不论是全局与否,都得设置成静态。另外在静态块中也是一样的。如static{}里面调用的变量也必须是静态的。2023-06-06 08:07:221
static int
因为static变量也就是静态变量,在程序运行过程中被声明后就会一直保存在内存里,所以只能声明一次,第二次再访问那个函数时,给静态变量声明同时赋值的语句就不再执行了,而静态变量的值始终保存在内存里,也就是上次改变以后的值。没有static修饰的函数中的变量,只在函数被执行时占用内存,函数执行完毕后就被销毁,数据也就不存在了,所以每次都要声明,值也就不会变。2023-06-06 08:07:313
.NET为什么要使用静态变量呢?
不懂2023-06-06 08:07:456
vb中全局变量能定义成静态的吗?
静态全局变量?没有这种说法静态变量只能在过程里声明全局变量就可以达到你的目的了初始化可以在main函数里2023-06-06 08:07:592
在C#中静态变量是不是全局变量
我觉得是一样的。2023-06-06 08:08:213
C++ 全局变量和全局静态变量有什么区别呢?
静态的 就认为在程序开始运行事前就订了在编译的时候,全局变量是进了主函数后2023-06-06 08:08:307
C语言,全局变量,静态变量问题
全局变量必须是static 类型这句话是错的 static 类型全局变量是全局变量的其中一种形式2023-06-06 08:08:503
全局变量和静态全局变量的区别
全局变量是指在整个程序的作用域范围之内都可以使用的变量,而静态全局变量仍然是一个全局变量,但是它的值可以在多程序环境中保持不变。在绝大多数情况下全局变量和静态全局变量的差别并不大,但在多线程的情况下,全局静态变量和全局变量会有较大区别。2023-06-06 08:09:082
局部静态变量,全局变量和全局静态变量的区别
局部变量与其它三个有本质区别。 局部变量,定义在函数内,作用域为定义位置,到所在大括号结束。 每次执行到定义语句的时候,系统为该变量分配内存,当作用域结束后,内存被释放。而另外三个,都是在系统运行时就分配内存,在运行过程中都不会释放,直到程序结束。也就是说,局部变量和其它三个,最明显的区别:1 生命周期不同2 分配时间不同3 分配位置不同。而另外三个,在这几项上是相同的,之间的区别在于作用域。全局变量,作用域为整个项目,不管在哪个文件中,只要声明后都可以使用。静态全局变量,作用域为定义改变量的所在文件。而静态局部变量,作用域与普通局部变量一样,都是定义位置到所在大括号结束2023-06-06 08:09:141
全局变量是静态存储的,文件中的任何一个函数都可以改变它的值。对吗?
得看文件中的内容及它的修饰符2023-06-06 08:09:224
c语言:static问题
两种用法:static声明的是内部变量,而不是外部变量,楼主搞错了,与extern相对。这里的内部、外部指文件,声明为内部变量后别的文件里就看不到这个变量了。还可以用来声明静态变量:函数里的局部变量声明为静态变量后,函数调用结束后它的值还保存,不同于一般的局部变量,退出后就扔了。2023-06-06 08:09:326
静态变量有何特点?如何存取静态变量?
静态变量的类型说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。 对于自动变量,它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。由此看来, 一个变量可由static进行再说明,并改变其原有的存储方式。 1. 静态局部变量 在局部变量的说明前再加上static说明符就构成静态局部变量。 例如:static int a,b;static float array[5]={1,2,3,4,5}; 静态局部变量属于静态存储方式,它具有以下特点: (1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。 (2)静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。 (3)允许对构造类静态局部量赋初值。若未赋以初值,则由系统自动赋以0值。 (4)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜2.静态全局变量 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。应予以注意。静态变量除范围之外,变量还有存活期,在这一期间变量能够保持它们的值。在应用程序的存活期内一直保持模块级变量和公用变量的值。但是,对于 Dim 声明的局部变量以及声明局部变量的过程,仅当过程在执行时这些局部变量才存在。通常,当一个过程执行完毕,它的局部变量的值就已经不存在,而且变量所占据的内存也被释放。当下一次执行该过程时,它的所有局部变量将重新初始化。但可将局部变量定义成静态的,从而保留变量的值。在过程内部用 Static 关键字声明一个或多个变量,其用法和 Dim 语句完全一样:Static Depth例如,下面的函数将存储在静态变量 Accumulate 中的以前的运营总值与一个新值相加,以计算运营总值。Function RunningTotal (num) Static ApplesSold ApplesSold = ApplesSold + num RunningTotal = ApplesSoldEnd Function如果用 Dim 而不用 Static 声明 ApplesSold,则以前的累计值不会通过调用函数保留下来,函数只会简单地返回调用它的那个相同值。在模块的声明段声明 ApplesSold,并使它成为模块级变量,由此也会收到同样效果。但是,这种方法一旦改变变量的范围,过程就不再对变量排他性存取。由于其它过程也可以访问和改变变量的值,所以运营总值也许不可靠,代码将更难于维护。声明所有的局部变量为静态变量为了使过程中所有的局部变量为静态变量,可在过程头的起始处加上 Static 关键字。例如:Static Function RunningTotal (num)这就使过程中的所有局部变量都变为静态,无论它们是用 Static、Dim 或 Private 声明的还是隐式声明的。可以将 Static 放在任何 Sub 或 Funtion 过程头的前面,包括事件过程和声明为 Private 的过程。2023-06-06 08:09:512
什么是静态变量,静态变量=全局变量,动态变量=局部变量吗??
简单来说,静态变量就是一个变量名称前有static标注的比如说staticinta;全局变量等于静态变量,他们的差别你可以简单理解成在作用域上的差别,静态变量是在一个函数中的作用域(主函数就是主函数作用域,局部函数就是局部函数的作用域),而全局函数是写在主函数外的(非局部函数中)空白处的变量,其生命期在主函数之前即产生,随着主函数运行完数据再有系统回收而动态变量与静态变量的差别是例如voida(){staticinti=0;//静态i++;}voidb(){inti=0;//动态i++;}动态变量就是,每一次调用完系统回收内存,下一次调用再分配内存,而静态变量的生命期会在主函数运行结束后内存才会被系统收回2023-06-06 08:10:031
C++ 全局变量和全局静态变量有什么区别?
1. 全局变量的作用域是整个项目,它只需要在一个源文件中定义就可以作用于所有的源文件,其它不包括全局变量定义的文件需要用extern关键字再次声明这个全局变量。2. 全局变量、静态全局变量、静态局部变量都是在静态存储区(全局数据区)中分配空间的,而局部变量是在栈上分配空间的。3. 全局变量、静态变量的生命期和程序生命期是一样的,在程序结束之后操作系统会回收空间。变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如Haskell)中,变量可能是不可变(immutable)的。在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中);但另外一些语言可能使用其它概念(如C的对象)来指称这种抽象,而不严格地定义“变量”的准确外延。2023-06-06 08:10:101
静态局部变量和普通全局变量以及静态全局变量的区别
局部变量与其它三个有本质区别。 局部变量,定义在函数内,作用域为定义位置,到所在大括号结束。 每次执行到定义语句的时候,系统为该变量分配内存,当作用域结束后,内存被释放。而另外三个,都是在系统运行时就分配内存,在运行过程中都不会释放,直到程序结束。也就是说,局部变量和其它三个,最明显的区别:1 生命周期不同2 分配时间不同3 分配位置不同。而另外三个,在这几项上是相同的,之间的区别在于作用域。全局变量,作用域为整个项目,不管在哪个文件中,只要声明后都可以使用。静态全局变量,作用域为定义改变量的所在文件。而静态局部变量,作用域与普通局部变量一样,都是定义位置到所在大括号结束。2023-06-06 08:10:231
java中的全局变量和静态变量是在编译时分配内存还是在加载时分配内存?
用static修饰的变量是在编译的时候分配内存,没有用static修饰的变量是在加载时分配2023-06-06 08:10:311
static局部变量和全局变量的区别
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文 件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作 用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。 由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可 以避免在其它源文件中引起错误。 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的 生存期(静态局部变量在程序运行结束释放空间,而普通静态局部变量在函数退出时释放空间)。 把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。 static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明 为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以 外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 (用static声明的即内部函数,内部函数指只能被本文件的其他函数所调用的函数, 内部函数在C++实际上可以通过类名修饰符访问其他均为外部函数)2023-06-06 08:10:381
static 定义的函数,应该怎么使用?
static定义变量的使用:一、静态局部变量:1、Static类内部变量同auto自动变量(即未加 Static 声明的局部变量)一样,是某个特定函数的局部变量,即只能在定义该变量的函数内使用该变量,2者作用域相同;两者的不同在于:auto自动变量会随着函数被调用和退出而存在和消失,而static类局部变量不会,它不管其所在的函数是否被调用,都将一直存在;不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。换言之,Static类型的内部变量是一种只能在某个特定函数中使用,但一直占据存储空间的变量。2、函数体内如果在定义静态变量的同时进行了初始化,则以后程序不再进行初始化操作(出现在函数内部的基本类型的的静态变量初始化语句只有在第一次调用才执行)。而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。3、静态局部变量的初始化表达式必须是一个常量或者常量表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。而对自动变量auto来说,如果不赋初值则它的值将是个不确定的值。4、当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。注:局部静态变量占用内存时间较长,并且可读性差,因此,除非必要,尽量避免使用局部静态变量。二、静态全局变量全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于:1、非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。2、静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static这个说明符在不同的地方所起的作用是不同的。应予以注意。static定义变量的使用:一、静态局部变量:1、Static类内部变量同auto自动变量(即未加 Static 声明的局部变量)一样,是某个特定函数的局部变量,即只能在定义该变量的函数内使用该变量,2者作用域相同;两者的不同在于:auto自动变量会随着函数被调用和退出而存在和消失,而static类局部变量不会,它不管其所在的函数是否被调用,都将一直存在;不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。换言之,Static类型的内部变量是一种只能在某个特定函数中使用,但一直占据存储空间的变量。2、函数体内如果在定义静态变量的同时进行了初始化,则以后程序不再进行初始化操作(出现在函数内部的基本类型的的静态变量初始化语句只有在第一次调用才执行)。而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。3、静态局部变量的初始化表达式必须是一个常量或者常量表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。而对自动变量auto来说,如果不赋初值则它的值将是个不确定的值。4、当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。注:局部静态变量占用内存时间较长,并且可读性差,因此,除非必要,尽量避免使用局部静态变量。二、静态全局变量全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于:1、非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。2、静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static这个说明符在不同的地方所起的作用是不同的。应予以注意。2023-06-06 08:10:551
C语言中变量的存储类型有哪几种,存储方式哪几种?谢喽
就你晁2023-06-06 08:11:066
Static全局变量与普通的全局变量有什么区别
你先解释下普通的全局变量是个啥?2023-06-06 08:11:273
java中的全局变量和静态变量是在编译时分配内存还是在加载时分配内存??
关于这个问题,全局变量(成员变量)是在创建对象的时候分配内存的创建对象过程为1分配空间2递归的创建父类对象(无父类这步可省略)3初始化成员变量4调用构造方法创建一个对象静态变量是在类加载的时候分配空间的,静态变量和对象没有关系是在JVM第一次读到一个类的时候加载信息的过程中分配空间的类加载过程为1加载父类(如果父类已经加载过,则不在加载)2初始化静态属性3按顺序的初始化静态代码块初始化的前提就是分配空间而且静态变量在以后的创建对象的时候不在初始化所以一般用静态来保存共享信息希望对你有所帮助2023-06-06 08:11:361
static 定义的函数,怎么使用
直接 类名.函数名2023-06-06 08:11:445
编译原理:静态数组的存储空间可以在编译时确定。这句话为什么是错的。请给出详细原因,谢谢。
函数里申请的静态数组只有在调用时才能确定存储空间吧,未被调用的函数里申请的静态数组是不会分配存储空间的。静态数组有可能是动态变量。2023-06-06 08:12:0013