-
2021-05-21 09:58:56更多相关内容
-
PHP static局部静态变量和全局静态变量总结
2020-12-19 03:46:33即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。4.当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用... -
C#中static静态变量的用法实例
2020-12-31 03:18:46本文实例讲述了C#中static静态变量的用法。分享给大家供大家参考。具体如下: 使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static修饰符可用于类、字段、方法、属性、运算符、事件和构造函数,... -
python如何设置静态变量
2020-12-17 01:13:01换个角度来看这个问题,函数中的静态变量其实可以看做是函数的一个内部变量,而不是调用期间生成的局部变量。所以这里介绍一种使用装饰器的方法给函数添加这样的内部变量。 def static_vars(**kwargs): def ... -
c++静态局部变量和静态函数示例
2021-01-20 06:30:58在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。但有的时候我们需要在两次调用之间对变量的值进行保存。通常的想法... -
单片机之静态局部变量static
2020-08-03 03:48:39如果定义成局部变量,则必须定义成静态局部变量,静态局部变量是在编译时赋初值的,只赋初值一次,以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。 -
局部静态变量static详解
2021-02-26 16:56:511.在局部变量前加上“static”关键字,就成了静态局部变量。 2.静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,...4.静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数转自:https://blog.csdn.net/zkangaroo/article/details/61202533
1.在局部变量前加上“static”关键字,就成了静态局部变量。
2.静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。
3.静态局部变量的初始化与全局变量类似.如果不为其显式初始化,则C++自动为其 初始化为0。
4.静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。
5.静态局部变量与局部变量在存储位置上不同,使得其存在的时限也不同,导致对这两者操作的运行结果也不同。
例如,下面的程序定义了全局变量、静态局部变量和局部变量:#include <iostream.h> int n = 1; //全局变量 void func() { static int a = 2; // 静态局部变量 int b = 5; // 局部变量 a += 2; n += 12; b += 5; cout << "a:" << a << " b:" << b << " n:" << n << endl; } · void main() { static int a; // 静态局部变量 int b = -10; // 局部变量 cout << "a:" << a << " b:" << b << " n:" << n << endl; b += 4; func(); cout << "a:" << a << " b:" << b << " n:" << n << endl; n += 10; func(); }
运行结果为:
a:0 b:-10 n:l a:4 b:10 n:13 a:0 b:-6 n:13 a:6 b:10 n:35
程序中主函数main()两次调用了func()函数,从运行结果可以看出,程序控制每次进入func()函数时,局部变量b都被初始化。 而静态局部 变量a仅在第一次调用时被初始化,第二次进入该函数时,不再进行初始化,这时它的值是第一次调用后的结果值4。 main()函数中的变量a和b与func()函数中的变量a和b空间位置是不一样的,所以相应的值也不一样。
静态局部变量的用途有许多:可以使用它确定某函数是否被调用过。使用它保留多次调用的值。对静态局部变量的说明:
(1) 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放.
(2) 为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的 值。而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
(3) 如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。而对自动变量来说,如果不赋初 值,则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。
(4) 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中它是“不可见”的。
-
局部变量、全局变量、静态变量
2019-09-16 09:52:33定义:局部变量指在程序中只在特定过程或函数中可以访问的变量。换言之,在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外时不能使用这些变量的,...局部变量
定义:局部变量指在程序中只在特定过程或函数中可以访问的变量。换言之,在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外时不能使用这些变量的,它们称为局部变量。
全局变量
定义:在函数外定义的变量是外部变量,外部变量就是全局变量,全局变量可以为本文件中其它函数所共用,它的有效范围从定义变量的位置开始到本源文件结束。
局部变量与全局变量的区别
局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。在函数体内引用变量会用到同名的局部变量而不是全局变量,对于一些编译器来说,
在同一个函数体内可以定义多个同名的局部变量
。例如我们可以在一个函数内部,在两个循环中都定义同名的局部变量i,而局部变量i的作用域在那个循环体内。
1.作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等;2.内存存储方式不同:全局变量存储在全局数据区中,局部变量存储在栈区;
3.生命期不同:全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了;
4.使用方式不同:全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用。函数内部会优先使用局部变量再使用全局变量
特别注意:局部变量不能赋值为与全局变量同名的值
静态变量:
定义:在程序运行期间分配固定的存储空间的变量,叫做静态变量 。
关键字:static
特别说明:静态变量自然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由static
加以定义后才能成为静态外部变量,或称静态全局变量;对于自动变量,它属于动态存储方式, 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。特点:
(1)静态局部变量在
函数内定义
,但不像自动变量那样,当调用时就存在,退出函数时就消失
。静态局部变量始终存在
着,也就是说它的生存期为整个源程序。(2)静态局部变量的生存期虽然为整个源程序,但是其
作用域仍与自动变量相同
,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。(3)允许对构造类静态局部量赋初值。若
未赋以初值
,则由系统自动赋值。数值型变量自动赋初值0
,字符型变量赋空字符
。(4)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以看出它是一种生存期为整个源文件的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。
三者区别:
一、从作用域看:
C++变量根据定义的位置的不同的生命周期,具有不同的作用域,可分为:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。
1.
全局变量具有全局作用域。
全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量。2.
局部变量具有局部作用域,
它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。3.
静态局部变量具有局部作用域,它只被初始化一次,
自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。4.
静态全局变量也具有全局作用域
,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。二、从分配内存空间看:
1.全局变量,静态局部变量,静态全局变量都在
静态存储区
分配空间,而局部变量在栈
里分配空间2.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,**当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。**而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
Tips:
A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题,因为他们都放在静态数据存储区,全局可见;
D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)
E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。
-
C++基础——局部静态变量Static
2020-02-25 19:48:59在局部变量前加上“static”关键字,就成了静态局部变量。 静态局部变量存放在内存的全局数据区。...静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变...- 在局部变量前加上“static”关键字,就成了静态局部变量。
- 静态局部变量存放在内存的全局数据区。
- 函数结束时,静态局部变量不会消失,每次该函数调用 时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。静态局部变量的初始化与全局变量类似.
- 如果不为其显式初始化,则C++自动为其 初始化为0。
- 静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变量与局部变量在存储位置上不同,使得其存在的时限也不同,导致对这两者操作 的运行结果也不同。
下面的程序定义了全局变量、静态局部变量和局部变量:
#include <iostream> using namespace std; int n = 1; //全局变量 void func() { static int a = 2; // 静态局部变量 int b = 5; // 局部变量 a += 2; n += 12; b += 5; cout << "a:" << a << " b:" << b << " n:" << n << endl; } void main() { static int a; // 静态局部变量 int b = -10; // 局部变量 cout << "a:" << a << " b:" << b << " n:" << n << endl; b += 4; func(); cout << "a:" << a << " b:" << b << " n:" << n << endl; n += 10; func(); system("pause"); }
程序中主函数main()两次调用了func()函数,从运行结果可以看出,程序控制每次进入func()函数时,局部变量b都被初始化。而静态局部 变量a仅在第一次调用时被初始化,第二次进入该函数时,不再进行初始化,这时它的值是第一次调用后的结果值4。 main()函数中的变量a和b与func()函数中的变量a和b空间位置是不一样的,所以相应的值也不一样。
静态局部变量的说明:
(1) 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放。
(2) 为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的 值。而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
(3) 如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。而对自动变量来说,如果不赋初 值,则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。
(4) 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中它是“不可见”的。
-
隐藏的坑——C++中局部静态变量的构造/析构顺序问题
2021-03-13 17:42:31首先,这是个“老问题”了,今番再论,实在是有感而发。 首先要明确一条原则:构造与析构的顺序是相反的。 个人总结,在这个知识点的理解和...第三层:理解在函数内部出现的局部变量的构造/析构顺序。同上,也不难掌. -
局部变量、全局变量和静态变量之间的区别
2021-01-23 11:37:22局部变量、全局变量和静态变量之间的区别 (1)局部变量 定义: 在一个函数内部定义的变量是局部变量,它只在本函数范围内有效。 1.主函数main定义的变量也只在主函数有效; 2.不同函数中可以使用名字相同的变量,... -
C++全局变量、局部变量、全局静态变量、局部静态变量
2018-09-05 16:18:311、全局变量比局部静态变量后析构。 2、C++全局静态变量的析构销毁顺序是未定义的,特别是在多线程环境,多dll环境下,特别复杂,但是在某个编译器下,析构顺序是一定,按着构造的反顺序析构,其他都是随机,不... -
局部静态变量Static详解
2017-03-10 18:01:40在局部变量前加上“static”关键字,就成了静态局部变量。静态局部变量存放在内存的全局数据区。...静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变量与局 -
静态局部变量
2021-01-07 09:59:47静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变量与局部变量在存储位置上不同,使得其存在的时限也不同,导致对这两者操作 的运行结果也不同。 对静态局部变量 -
Python实现局部静态变量
2017-01-07 16:02:03Python实现局部静态变量[TOC] python没有局部静态变量,但可以通过以下几种方式实现类似于C语言的函数内局部静态变量。1、定义函数属性在python中一切皆对象,函数也是一个对象,因此可以给函数定义属性:def func... -
【C#】全局变量、全局静态变量、局部变量、局部静态变量的区别
2018-10-18 10:06:32C#中变量分为:全局变量、静态全局变量、局部变量和静态局部变量。 1、按存储区域分 (1)全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域; (2)局部变量存放在内存的栈区。 2... -
java静态变量、静态方法和静态代码段
2021-03-06 01:06:03先上实例public classTestStatic {public static String staticString = "this ... //静态变量public String instanceString = "this is a instance String";//实例变量//静态方法public static voidstaticMethod()... -
全局静态变量和局部静态变量的区别
2016-03-24 18:35:35(1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。 (2)静态局部变量的生存期虽然为整个源程序,但是其作用域仍与... -
静态局部变量和静态全程变量static。
2019-01-01 13:28:04我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何... -
静态全局变量、全局变量、普通局部变量、静态局部变量四者之间的区别
2020-07-22 20:46:00按存储区域分:全局变量、静态...4、全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。 5、静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部 -
static局部变量(静态局部变量的用法)
2021-11-27 11:11:26这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明。通过下面的例子可以了解它的特点: #include <stdio.h> int main() { int f(int); int a=2,i; for(i=0; i<3; i++) { printf... -
静态局部变量定义时赋初值问题和定义后赋初值问题
2019-12-13 20:17:01静态局部变量定义时赋初值问题和定义后赋初值问题 如 1 . static int a=1; 2 . static int a; a=1; 函数中静态局部变量a赋初值,采用上述两种方式时不一样,采用方式1时a是上次结束时的值,采用2方式时a=1还是... -
全局变量、局部变量、静态全局变量、静态局部变量的区别
2019-10-06 16:02:59全局变量、局部变量、静态...的区别从作用域看:从分配内存空间看:Tips 原文链接:Runoob, C++变量作用域_author: %fs. C++ 变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为 6 种:全局作用域... -
全局变量、局部变量、全局静态变量、局部静态变量的区别
2016-07-24 15:09:43全局变量、局部变量、全局静态变量、局部静态变量的区别。要从分配内存的位置和作用域入手来解释。 全局变量,分配的内存在静态存储区内存上面,其作用域是全局作用域,也就是整个程序的生命周期内都可以使用,... -
静态持续性变量与自动局部变量异同
2020-12-22 16:41:38它一直存在,由于是静态的,所有它们并没有像其它自动局部变量(即相应作用域内定义的变量,出了作用域变量自动销毁)那样,在特定的管理装置中管理维护(即栈中)。而是编译器直接分配固定的内存(因为程序在运行中... -
全局变量、局部变量、静态全局变量、静态局部变量的区别(与常见面试基础题)
2019-10-04 18:23:00对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量... -
【附代码】局部静态变量 和 全局变量释放顺序
2019-09-29 18:58:29今天,因为工作需要,遇到一个...全局变量声明定义放在 main 函数中的局部静态变量后面算不算后声明的呢?这里同样我先给出结论:对于全局变量的处理都是在 main 函数之前就进行的,而局部静态变量不用说,我们都知... -
关于静态局部变量与静态外部变量
2017-11-09 19:14:101:静态局部变量存储在静态存储区,如果赋有初值,函数调用期间只赋值一次,下次调用该函数时,静态局部变量值为上次调用之后的结果,原因:静态局部变量在函数调用期间是不释放的;而自动变量在每次调用函数时都会...