static静态局部变量和静态全局变量的区别详解
发布网友
发布时间:2022-04-30 03:58
我来回答
共1个回答
热心网友
时间:2023-10-10 19:39
一、静态局部变量:
1、static类型的内部变量同auto自动变量(即未加 static 声明的局部变量)一样,是某个特定函数的局部变量,即只能在定义该变量的函数内使用该变量,两者作用域相同;两者的不同在于:auto自动变量会随着函数被调用和退出而存在和消失,而static类局部变量不会,它不管其所在的函数是否被调用,都将一直存在;不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。换言之,static类型的内部变量是一种只能在某个特定函数中使用,但一直占据存储空间的变量。
2、函数体内如果在定义静态变量的同时进行了初始化,则以后程序不再进行初始化操作(出现在函数内部的基本类型的的静态变量初始化语句只有在第一次调用才执行)。而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
3、静态局部变量的初始化表达式必须是一个常量或者常量表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。而对自动变量auto来说,如果不赋初值则它的值将是个不确定的值。
4、当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用(主要是变量的作用域造问题成的),因此仍以采用局部静态变量为宜。
注:局部静态变量占用内存时间较长,并且可读性差,因此,除非必要,尽量避免使用局部静态变量。
二、静态全局变量
全局变量(外部变量)的声明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。
static静态局部变量和静态全局变量区别
这两者的区别在于:
1、非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
2、静态全局变量则*了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。
从以上分析可以看出————
把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。
把全局变量改变为静态变量后是改变了它的作用域,*了它的使用范围。static静态变量会被放在程序的全局存储区中(即在程序的全局数据区,而不是在堆栈中分配,所以不会导致堆栈溢出),这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
静态变量和局部变量和全局变量的区别
1>全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间 2>全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量...
静态ip - StormProxies
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,IP纯净高匿;2、覆盖全球200+的国家与地区,超7000万住宅IP。3、高可靠性,24小时稳定运行,平均99.99%的可用率;4、性价比更高,便宜好用,单个IP也能享受最优价格,没有额外费用;5、易于使用,支持HTTP/HTTPS/SOCKS5协议,提供多种API参数,网络集成更快捷;6、客服全天在线为您排忧解难,并可根据您的业务需求制定更合适的代理…StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,IP纯净高匿;2、覆盖全球20...
static局部变量和全局变量的区别
局部变量:每次进入进入子函数中重新赋值 static:静态变量,开始定义时赋值,以后进入子函数时之前在此函数中计算的值重新赋值该变量 ,static变量和全局变量是不一样,static变量只能在你定义那个子函数中有效。
static局部变量和全局变量的区别
全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文 件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作 用域, 即只在定义该变量的...
C语言静态局部变量和全局变量有什么区别,不都是在整个程序中都有效吗...
按作用域分:全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量...
全局变量,静态全局变量,静态局部变量和局部变量的区别1
按作用域分,全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全...
全局变量 与 static型的局部变量 有什么区别
第一种:static局部变量 在函数体内定义int i;和static int i;的区别 首先他两都只在定义该变量的函数中有效 第一个属于非静态局部变量,他是从栈内存分配空间,其特点是从执行该函数开始,为i分配栈内存,函数结束运行后,i所分配的内存会被系统自动回收(即这个处理后的i值就此消失),所以他的...
C#静态全局变量和静态局部变量有什么区别?
生命周期和作用域不一样,全局变量拥有全局生命周期,也就是说这段程序不管什么地方都可以引用;局部变量的话只有在定义的那段代码或者类或者方法内引用,一旦这个方法或者类运行结束,那么这个变量就销毁了
静态局部变量和普通全局变量以及静态全局变量的区别
1 生命周期不同 2 分配时间不同 3 分配位置不同。而另外三个,在这几项上是相同的,之间的区别在于作用域。全局变量,作用域为整个项目,不管在哪个文件中,只要声明后都可以使用。静态全局变量,作用域为定义改变量的所在文件。而静态局部变量,作用域与普通局部变量一样,都是定义位置到所在大括号...
C++中static的几种含义:static局部变量,static全局变量,类中的 stati...
看起来和用起来像是局部变量,但实际上他的性质跟其他的静态变量是一样的,也就是说在内存中只有一个副本,不会像局部变量那样函数调用完毕就释放。与其他静态变量不同的是他的可见性只保持在声明它的函数体内,但可以设置访问函数提供给外部使用。static全局变量。这种用法继承自C语言,表示这个全局变量...
静态局部变量和普通全局变量以及静态全局变量的区别
静态局部变量和普通全局变量以及静态全集变量在编译时,编译器会自动给他们分配地址。而且是从MCU上电运行开始,一直驻留,不会被回收的。而真正的区别在于他们的作用域。静态局部变量的作用域是在于定义它的那个函数内。由于其在编译时编译器就给他们分配了地址,并且做了初始化,所以它只能被初始化一次,...