- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VFP-04-06-变量作用域、自定义函数
变量作用域、自定义函数
4.5.3 内存变量的作用域
变量的作用域:变量的作范围。程序由模块(主、子程序)组成,模块中有内存变量,内存变量有作用范围。变量的作用域,从定义变量处开始,一直向下。
1.定义全局内存变量
全局变量既可以是单个变量,也可以是数组。分别以下列格式定义。
格式1:Public 内存变量表
格式2:Public 数组名1(上界1[,上界2[, ...])[,…]
功能:定义全局变量。
①内存变量表中既可含普通变量,也可含数组。
②全局变量不会自动释放。只能用release命令显式释放,或退出VFP。
③VFP命令窗口中定义的变量,默认为全局变量。
④全局数组的每个元素都是全局的。
第116页,例 4.35 主程序中使用子程序中定义的全局变量。
*文件名Main.prg
set talk off
clear
clear memory 清除所有内存变量
I=2 默认是私有的
Do ABC
?主程序中的输出结果:
?I=+str(I,2)+ J=+str(J,2)
set talk on
return
*---------------------
Procedure ABC
public J
J=I*8
J=J+5
?过程中的输出结果:
?I=+str(I,2)+ J=+str(J,2)
return
小提示:要检测全局变量,请先clear memory以排除干扰。
2.定义局部内存变量
(1)什么叫局部?
更小的范围就是局部。对于一个模块,更后的部分是局部。对于主程序,子程序是局部。
(2)Private定义局部变量
格式1:Private 内存变量表
格式2:Private 数组名1(上界1[,上界2[, ...])[,…]
功能:定义局部变量。
①未经定义的变量,默认是局部(Private)的。
③无论全局还是局部变量,无初值的,一律自动赋初值.F.。
③局部变量作用域的子模块扩展规则
Private变量的作用域,通过调用子模块而扩展到子模块中。
图4-20 Private变量作用域子模块扩展规则
第117页,例 4.36 子程序中的局部变量,在主程序中找不到。
R=100 默认为Private变量
Do Sub1 调用子程序
?P 主程序中找不到这个变量
Return
*-------------------
procedure Sub1
P=2*3.14*R 主程序中的Private变量,子程序中可用
return
3.Private隐藏内存变量的功能
(1)同名变量就近使用规则(原理)
程序中,对于同名的变量,默认使用最近的。因此,
①字段变量(因为在当前工作区内)优先于(即隐藏)同名内存变量;
注:什么叫隐藏?就是被遮住,看不见,用不上。
图4-22 字段变量隐藏同名内存变量
例如 use student.dbf
use student.dbf
?学号 结果是字段变量“学号”值,如“960106”
学号=abcd “=”号赋值,只给内存变量赋值
?学号 结果还是优先使用字段变量
?m.学号 特别用“m.”指明内存变量,结果才是“abcd”
②同一模块内,小局部存变量优先于(即隐藏)大局部同名内存变量;
图4-23 Private变量隐藏同模块同名变量
③不同模块中,子模块局部内存变量优先于(即隐藏)主模块同名内存变量。
图4-26 用Private隐隐藏变量
小提示:主程序中的private变量,子程序同样可以用private屏蔽。
(3)为什么大范围定义的局部变量,小范围中再定义为全局变量会出错?
因为那样,与Private的隐藏功能相矛盾。
第118页,例 4.37 子程序中的同名局部变量隐藏主程序中同名变量。
R=100 默认为Private变量
P=10 默认为Private变量
Do Sub2 调用子程序
?P 仍是主程序中的值
Return
*-------------------
procedure Sub2
Private P 局部变量,主程序中的同名变量被屏蔽
P=2*3.14*R 主程序中的Private变量,子程序中可用
Return
*(5)有没有不通过子程序扩展作用域的变量?
有,Local变量,即本地变量。如:Local x,y,z。
小提示:采用Local变量,是向C语言靠拢。
4.调用过程时的数据传递
教学提示:VFP的参数传递,过程中默认传址
文档评论(0)