找回密码
 注册
Simdroid-非首页
查看: 64|回复: 2

持久变量(Persistent Variables)

[复制链接]
发表于 2010-1-7 21:07:08 | 显示全部楼层 |阅读模式 来自 浙江杭州
刚才遇到一个以前没见到过的名词Persistent Variables,搞了半天才搞明白,写出来与大家共享。

    持久变量类似於C中的static变量。C中的静态变量按作用域分为全局和局部两种,持久变量是属于局部作用域的那种。因此,Persistent Variables按字面意思来翻译是持久变量,但更确切地说,Persistent Variables应称为局部静态变量。
    持久变量只能在M文件函数中定义和使用;只允许定义它的函数存取;当定义它的函数退出时,MATLAB不会从内存清除它,下次调用这个函数,将使用它被保留的当前值。必须在声明持久变量之后,才能使用它。最好在函数开始处声明永久变量。定义持久变量,用persistent语句。比如声明SUM_X为持久变量:

persistent SUM_X

Matlab不允许将函数参数(输入参数和输出参数)声明为持久变量。定义持久变量以后,MATLAB把它的初始值设为空矩阵[]。
当定义持久变量的函数被清除(比如用clear 函数名 或clear all命令)或因编辑M文件而改变了定义持久变量的函数时,Matlab会清除所有的持久变量。可以用mlock命令使一个M文件在内存中不被清除,进而保留这个M文件中的持久变量也不会被清除。

评分

1

查看全部评分

发表于 2010-1-7 23:27:12 | 显示全部楼层 来自 北京
Simdroid开发平台
呵呵,这种变量在使用sinulink调用m函数仿真时可能会经常用到,因为simulink调用m文件是一次一次的调用,如果想在本次调用时保存一个值,下次继续使用,又不想用global的话,persistent最好不过了。
这种变量用之前一般先初始化,比如想记录一个m文件被连续调用了多少次,可以这样写:

persistent aaa;
if isempty(aaa)
    aaa = 0;%如果第一次使用,aaa=[],这里初始化一个值
end
aaa = aaa + 1;

上面一段代码加入到一个function中,作用就是统计这个m文件被调用了多少次
如message兄所言,这种变量用起来一定要注意clear functions或clear all

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-1-8 16:14:44 | 显示全部楼层 来自 北京
学习了。以前一直没用过
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-7 03:15 , Processed in 0.045832 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表