C中什么情况下把局部变量定义为局部静态变量

首先要说明,数组不是变量;C中称它是具有相同类型元素的集合,严格说来它是一种简单的数据结构——这是题外话。定义在函数中的自动型(就是不用static修饰)数组,函数被调用时才创建,而函数结束后就自动销毁了,那么函数执行过程中对它的操作就白费了。定义成static型后,编译时就为其分配内存空间并永久性保留着,直到程序结束,函数对它的操作就不会丢失了。知道这个原理后,也就知道并不是函数中的数组都得定义成static型,比如操作结果是在屏幕上显示数组内容,那在函数里作显示,这就不必用static了……

如果你希望在一个函数中对一个变量只执行一次初始化,以后不再初始化,使用上一次结果,就应该使用静态局部变量。
例如: static int n; 
其他类型都可以。

解决方案二:

比如说你要在局部计算一个圆的半径,那么你可以将PI的值申请为static,因为PI以后再也不会变更了!希望能够帮到你!

解决方案三:

static修饰的变量,可以在任何地方通过类名::变量名的方法访问他的值,比如你要统计一个类创建的次数,就可以给这个类 写个static的变量用来计数

解决方案四:

加了static只不过是存储的位置不一样了而已,跟是否局部变量没关系,当然,全局变量加不加static都一样。

 

原文地址:https://www.cnblogs.com/lanzhizui/p/8519622.html

时间: 2024-10-14 22:28:03

C中什么情况下把局部变量定义为局部静态变量的相关文章

C++局部变量、全局变量、静态变量(堆、栈、静态存储区)

1 static关键字 1.1 隐藏 eg: //a.c文件中 char a = 'A'; void msg() { printf("Hello\n"); } //main.c文件中 extern char a; printf("%c",a); 输出结果:A Hello 所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问.a是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的. 如果加了stat

比较全局变量、全局静态变量、局部变量、局部静态变量的区别

比较全局变量.全局静态变量.局部变量.局部静态变量的区别,他们在编译完后存储位置在什么地方.初始化值在什么地方.内存什么时候分配.赋初值对这些变量有哪些影响等.要弄清楚这些问题,首先要弄清楚下面几个知识点. C语言分下面几个存储区: 1.栈区(stack) 由编译器在需要的时候自动分配释放,在不需要的时候就自动清除的变量存储区.通常存放的变量是函数的参数值.局部变量的值等,其操作方式类似于数据结构中的栈. 2.堆区(heap) 一般由程序员去分配释放,和编译器完全没有关系,直接由我们的应用程序去

成员变量、局部变量、差异和静态变量

在堆栈区成员变量,自属于所述对象的部分成员.对象是成对分配 局部变量被分配在占,引用的对象被分配在栈上 静态变量被分配在静态区域中的方法区 1:成员变量和局部变量之间的差 (1)在类中的位置不同 成员变量:类中方法外 局部变量:方法定义中或者方法声明上 (2)在内存中的位置不同 成员变量:在堆中 局部变量:在栈中 (3)生命周期不同 成员变量:随着对象的创建而存在,随着对象的消失而消失 局部变量:随着方法的调用而存在.随着方法的调用完成而消失 (4)初始化值不同 成员变量:有默认值 局部变量:没

【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别

局部变量: 创建在栈区(向下生长),生命周期存在于当前作用域中.     创建时若未初始化,则为随机值. 全局变量: 创建在static区,生命周期一直存在. 创建时若未初始化,则为0. 静态局部变量: 切断了外部链接属性.创建在static区. 创建时若未初始化,则为0. 全局变量和静态变量的存储是放在一块的,初始化了的全局变量和静态变量在一块区域,  未初始化的全局变量和未初始化的静态变量在相邻的另一块区域. 全局静态变量: 切断了外部链接属性,创建在static区,生命周期一直存在. 创建

随笔⑨ java中的变量 --- 类变量(静态变量),final变量,成员变量,局部变量

java中的变量 --- 类变量(静态变量),final变量,成员变量,局部变量 ① 类变量(也叫静态变量)是类中独立于方法之外的变量,用static 修饰,静态变量随着类的加载而加载. ② final变量:用final关键字修饰,不能被修改.与static一起用可表示常量. ③ 成员变量(也叫"实例变量"."域"):也是类中独立于方法之外的变量,不过没有static修饰.可以不进行初始化,Java会自动进行初始化,如果是引用类型默认初始化为null,如果是基本类型

java中的静态变量,静态方法与静态代码块详解

java中的类的生命周期分为装载,连接,初始化,使用,和卸载五个过程. 而静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象. 静态变量有两种情况: 静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用 静态变量是一个引用.这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它. 因此如果

C# 中的局部static变量

其实这问题没什么可讨论的,C#不支持局部静态变量. 但还是想了一下C#为什么不支持局部静态变量,以下均是个人想法. C++和C支持局部静态变量,也就是在一个函数的内部声明一个静态变量,这种变量的特定如下: 静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失.静态局部变量始终存在着,也就是说它的生存期为整个程序的生命周期 静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量.退出该函数后,尽管该变量还继续存在,但不能使

java 成员变量、局部变量、静态变量、类变量、非静态变量、实例变量、向前引用、非法向前引用、静态代码块、非静态代码块

①java类的成员变量有俩种: 一种是被static关键字修饰的变量,叫类变量或者静态变量 另一种没有static修饰,为成员变量 ②通俗点说: 类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享.静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期. 而实例变量取决于类的实例.每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期. 注意点: 1.JAVA中初始化

matlab中的静态变量

persistent X Y Z 将X,Y,Z定义为在其声明处的函数的局部变量.然而,这些变量的值在函数调用期间在内存中保存(应该是堆区).Persistent 变量和global(全局)变量相似,因为Matlab为他们创建永久的存储空间.但是Persistent变量与global(全局)变量不同之处在于 Persistent变量只对声明该变量的函数是可见的.这可以防止该变量被其他函数或者Matlab命令行改变. 当M文件被从内存中清除或当M文件被改变时,Persistent变量被清除. 如果P