php静态变量量与动态变量的定义与区别

静态变量和动态变量的区别_百度知道
静态变量和动态变量的区别
我有更好的答案
非静态变量:此变量在其所在子程序开始被执行前自动分配存储空间并初始化,在所在子程序执行完毕后自动释放所分配的存储空间。也就是说,变量的存储空间仅在其所在子程序执行过程中存在;静态变量:此变量与全局、程序集变量一样,被分配给在程序运行期间永久存在的存储空间并仅在应用程序启动运行前被初始化一次。
采纳率:50%
为您推荐:
其他类似问题
静态变量的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!什么叫静态变量?与动态变量的差别在哪?_百度知道
什么叫静态变量?与动态变量的差别在哪?
我有更好的答案
动态全局变量:作用域为整个项目,即最终编译成可执行文件的所有文件中均可以使用动态全局变量。生命周期为从程序运行到程序退出,即贯穿整个运行时间。 静态全局变量:作用域为当前文件,从定义/声明位置到文件结尾。生命周期为从程序运行到程序退出,即贯穿整个运行时间。
静态变量的命名前缀是static吗?
采纳率:9%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C语言--静态变量和动态变量初始化区别
补充:c里等号的意义是分两种情况,一种是在表达式里,
而另一种是在变量声明中。 在变量声明中的等号不可以看作是赋值,
它只是初始化,也就是说它的意义只是告诉编译器如何初始化这个内存空间。而表达式中的 =
就是赋值的意思了。&
&自动变量和静态变量的初始化存在一个重要的差别。
在静态变量的初始化中,我们可以把可执行程序文件想要初始化的值放在当程序执行时变量将会使用的位置。当可执行文件载入到内存时,这个已经保存了正确初始值的位置将赋值给哪个变量。完成这个任务并不需要额外的时间,也不需要额外的只了能够,变量将会得到正确的值。如果不显式地制定其初始值,静态变量将初始化为0。
自动变量的初始化需要更多的开销,因为当程序链接时还无法判断自动变量的存储位置。事实上,函数的局部变量在函数的每次调用中可能占据不同的位置。基于这个理由,自动变量没有缺省的初始值,而显式的初始化将在代码块的起始处插入一条隐士的赋值语句。
静态变量:其初始化值被放在程序执行时将使用的位置,所以不需额外时间,也不需额外指令。如果不显示初始化,静态变量将被初始化为0。
自动变量:程序链接时仍无法判断变量的存储位置。所以,自动变量没有缺省的初始值,而显示初始化将在代码的起始处插入一条隐式赋值语句。
这导致了四种结果:
自动变量初始化较之赋值语句效率并无提高。除了声明为const的变量之外,在声明变量的同时进行初始化和先声明后赋值只有风格只差,并无效率之别。
自动变量所在块每次执行时,都要对自动变量重新赋值。----这与静态变量大不相同,后者只是在程序开始执行前初始化一次。
由于初始化在运行时执行,因此可以使用任何表达式作为初始化值。(这也解释了为什么静态变量的初始化不能使用表式)
除非对自动变量显式初始化,否则当自动变量创建时,它的值一定是垃圾。
看下面的例题:
原文:http://blog.csdn.net/hanchaoman/article/details/8115073
static b=1;
我们所理解的静态变量b,只知道它在上面的函数内部只初始化一次,其实是个假像
,我要表达的是,事实上b初始化的值,不是在循环体完成的.继续下看.
static b=1;
注意这一句:
static b=1;为什么我们循环体无限循环,b
他只会赋一次值呢,从C上面是看不出来的.
经过我反汇编发现,
static b=1;
根本不在循环体中.可以想像,程序被译成目标机器的时候是这个样子
//static b=1;&& 这句没有!
那么b是什么时候赋的值呢,是编译的时候就确定了。。就是说,编译的时候,就给b初始化好了!
类似,我们定义全局变量,如果不赋值,编译器给他赋上0.如果定义了值,就在编译的时候就确定下来了,这个值是编译器根据我们的语句赋给它的.而不程序中指令赋给它的!
a,b变量都在哪呢,他们呆在所谓的静态存储区(后面有介绍),物理上整个程序中任意代码都能访问到这片区域,说明他们在存储上是一样的.但是a,b区别又在哪呢,就是对他们的引用,编译器,允许你任何地方,函数中调用a,而b,不行,他有局部作用域,比如你在一个函数中声明了静态变量b,那只能在这函数中调用b.如果在其它的地方调用它,编译器会报错.这就是逻辑上的控制,而实际上,"物理"上是允许程序在任意地方访问b变量,但是编译器哥哥不会让你访问.
那什么又叫静态存储区呢,我个人认为就是这是安全区域,不会随便被别的变量替掉.分给你的就是你的,不会被别人给占了.
&谈到这里我们顺便提一下,我们其它函数的局部变量存在内存中的位置,局部变量存放在栈中,栈是一片特殊内存区域,多个变量可能共享使用这片区域,这里我们就可以看到一个问题,既然共享使用,假如我们声明一个局部变量,如果不赋初值,这个变量所在栈中的位置,这个位置包含的值,是随机的,是上次别的变量留下来的值.
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别 - 简书
C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别
一直对C语言中的各种变量有点模糊,终于找到了一个比较完整的说明.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类型,则返回为错指针。
关于局部变量、全局变量与静态全局变量和静态局部变量的比较与分析和拓展: 首先要明白的是局部变量与其它三个有本质区别。 局部变量,定义在函数内,作用域为定义位置,到所在大括号结束。 每次执行到定义语句的时候,系统为该变量分配内存,当作用域结束后,内存被释放。 而另外三个,都是...
将从存储方式、生命周期(时间)、作用域(空间) 三个维度来区分它们。 1 存储方式 静态存储方式静态存储方式是 程序一开始运行时就分配存储空间,从程序开始运行到程序结束,存储空间都保持不变的存储方式。 动态存储方式动态存储是 程序在运行时,需要使用时才分配存储空间,不需要使...
转载:http://www.cnblogs.com/yc_sunniwell/archive//1777441.html 静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。 静态变量或静态函数只有本文件...
C语言笔记 一终端命令 ls -l显示当前工作路径下的所有的文件及文件信息 d开头文件夹 -开头文件 r读 w写 x执行 - -当前用户的权限 - -其他用户的权限 & pwd查看终端程序的工作路径 &cd切换工作路径 &clear清理屏幕 &touch新建文件 &open...
转自:http://www.cnblogs.com/King-Gentleman/p/5350563.html1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。 从作...
提到泰勒·谢里丹。 大概没有多少人知道这个名字。 但是提到「边境杀手」和「赴汤蹈火」,你们一定熟悉。 泰勒·谢里丹就是这两部电影的编剧。 有趣的是,泰勒·谢里丹从未学过写作,也没上过电影学院。他最开始是以一个龙套的身份活跃在影视圈。 转行做编剧也是因为生活所迫,跑龙套的钱完...
感情是需要沟通的。这一点我们应该都明白。 但是在这个繁忙的社会里,我们每天忙着上班,忙着见客户,忙着写文案,忙着参加会议……这么忙,我们还剩下多少精力去维系我们的感情呢? 近日,有网友在网上发起了一项调查,最终筛选出了50句最能让人感到暖心的话。 也许,这些话能在维系感情上...
◎关于混序网络电影《灭口》由来及珍藏 中国首部社群众筹网络电影《灭口》,是由北京混序影视文化有限公司通过“混序部落”社群众筹的方式,已经于日在北京朝阳区万达影城举行了隆重开机仪式,并于日在北京通州正式开机拍摄,是一部都市轻喜剧电影。《灭口》...
三日东风,江波水暖轻舟荡。数声清唱,小舟轻轻晃。 乍暖还寒,又是大风降。倚窗望,多少惆怅,风雨中埋葬。

我要回帖

更多关于 静态变量jave 的文章

 

随机推荐