如何理解"函数中必须要使用static变量情况"

如何理解"函数中必须要使用static变量情况",第1张

就是说,不能返回局部自动变量的指针,只能返回静态局部变量的指针。原因是局部自动变量在函数结束后就消失了,返回的指针还指在那里,会带来安全问题;局部静态变量是一直存在的,所以返回它的指针当然就是安全可用的了!

你在函数中定义static变量,在定义的时候须得给他赋值,而且在程序运行中,只有第一次调这个函数时你所赋的值才有效果,之后每次调此函数,都不会重新给他赋值了(例如staitc a = 10,下次跑这个函数时不会跑这句话了。)。不过你可以在函数中改变这个值,并且这个值会被保留下来,当你下次调这个函数的时候,得到的值会是你最后给变量所赋的值。

static 变量 是可以改变的。只是在初始化时候只会赋值一次而已。。。比如你在一个函数里定义 X 变量,那么你每次调这个函数都会去定义这个变量吧,但是如果你把 X 定义为 static 类型,那么你只会第一次掉它的时候会去定义它,后面调这个函数时,X 变量就已经存在了不会再去定义。但是它的值还是可以改变的。你可以通过赋值语句改变static变量的值

通俗一点说,static 修饰的是这个类生来就有的属性

比如狗的五官,够的尾巴等属性,然后会汪汪叫

class Dog{

static String 尾巴;

static void wangwang(){}

}

而你的 *** 作是在类的方法中去定义这个类生来就有的属性,想想也绝对别扭对吧

类的方法不是一个类,我们可以去new一个类对象,但是我们不可能去new一个类的方法

然后就是理论一点

在程序第一次创建(比如说new一个)某个对象的时候,java虚拟机会吧这个类的class文件加载到内存中,在这个过程中,虚拟机也会吧这个类的static属性初始化完毕,比如你想给Dog定义的age属性,虚拟机会分配内存空间并初始化值给age属性。这个过程只发生一次,今后你在创建Dog对象的时候,age会共享当初初始化的内存空间以及初始化值

而你吧static定义在方法内部,上面提到的初始化就无法进行

总之,这是java定义的编码规则,必须遵守而已

变量有不同,因为变量有两个属性,生存期和作用域。

定义在函数外部是全局变量,生存期是整个程序运行到结束,作用域也是整个程序。

定义在函数内部是局部变量,生存期是整个程序运行到结束(对于static),而作用域只是函数被调用的这个过程。也就是说不能在函数外调用它。

函数一般的,在一个变化过程中,有两个变量x、y,如果给定一个x值,相应的就确定唯一的一个y,那么就称y是x的函数,其中x是自变量,y是因变量,x的取值范围叫做这个函数的定义域,相应y的取值范围叫做函数的值域。

1)、变量放程序全局存储区调用候保持原赋值点与堆栈变量堆变量区别

2)、变量用static告知编译器自仅仅变量作用范围内见点与全局变量区别

Tips:

A若全局变量仅单C文件访问则变量修改静态全局变量降低模块间耦合度;

B若全局变量仅由单函数访问则变量改该函数静态局部变量降低模块间耦合度;

C设计使用访问态全局变量、静态全局变量、静态局部变量函数需要考虑重入问题;

D我需要重入函数我定要避免函数使用static变量(函数称:带内部存储器功能函数)

E函数必须要使用static变量情况:比某函数返值指针类型则必须static局部变量址作返值若auto类型则返错指针

函数前加static使函数静态函数处static含义指存储式指函数作用域仅局限于本文件(所称内部函数)使用内部函数处:同编写同函数用担自定义函数否与其文件函数同名

扩展析:术语static着寻历史起初C引入关键字static表示退块仍存局部变量随staticC第二种含义:用表示能其文件访问全局变量函数避免引入新关键字所仍使用static关键字表示第二种含义C++重用关键字并赋予与前面同第三种含义:表示属于类属于类任何特定象变量函数(与Java关键字含义相同)

全局变量、静态全局变量、静态局部变量局部变量区别变量:全局变量、静态全局变量、静态局部变量局部变量

按存储区域全局变量、静态全局变量静态局部变量都存放内存静态存储区域局部变量存放内存栈区

按作用域全局变量整工程文件内都效;静态全局变量定义文件内效;静态局部变量定义函数内效程序仅配内存函数返该变量消失;局部变量定义函数内效函数返失效全局变量(外部变量)说明前再冠static

构静态全局变量全局变量本身静态存储式

静态全局变量静态存储式

两者存储式并同两者区别虽于非静态全局变量作用域整源程序

源程序由源文件组非静态全局变量各源文件都效

静态全局变量则限制其作用域

即定义该变量源文件内效

同源程序其源文件能使用由于静态全局变量作用域局限于源文件内能该源文件内函数公用

避免其源文件引起错误

析看

局部变量改变静态变量改变存储式即改变存期全局变量改变静态变量改变作用域

限制使用范围

static函数与普通函数作用域同仅本文件前源文件使用函数应该说明内部函数(static)内部函数应该前源文件说明定义于前源文件外使用函数应该文件说明要使用些函数源文件要包含文件

全局变量静态变量没手工初始化则由编译器初始化0局部变量值知

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12189006.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存