以下是引用TonyDeng在2014-2-21 10:54:29的发言:
數組重定義和調整尺寸是不會重置數據的,這種方法我常用,有問題早完蛋了。你的測試結果,原因在於你用public來試驗,帶public的語句,都是帶初始化的執行語句,不像private和local那樣僅僅是聲明,在後者的環境,dimension一個數組,數據是保存的。
因为有时候在表单中定义的数组要跨着用,只能设为PUBLIC。我写了一段测试程序,分别用PUBLIC、DIMENSION、LOCAL、PRIVATE定义数组。实验证明:前三种定义数组的方式都无法在对原数组扩容后保留原值,而PRIVATE干脆就不能定义数组。从实验输出的结果来看,私有型数组必须用DIMENSION来定义。
以下是代码,谁有兴趣,可以复制到VFP9中运行一下,看看结果:
CLEAR
PUBLIC abc(3)
abc(1)=[row1]
abc(2)=[row2]
abc(3)=[row3]
LIST MEMORY LIKE abc
PUBLIC abc(4)
LIST MEMORY LIKE abc
CLEAR MEMORY
DIMENSION abc(3)
abc(1)=[row1]
abc(2)=[row2]
abc(3)=[row3]
LIST MEMORY LIKE abc
DIMENSION abc(4)
LIST MEMORY LIKE abc
CLEAR MEMORY
LOCAL abc(3)
abc(1)=[row1]
abc(2)=[row2]
abc(3)=[row3]
LIST MEMORY LIKE abc
LOCAL abc(4)
LIST MEMORY LIKE abc
CLEAR MEMORY
DO SZ
RETURN
PROCEDURE SZ
PRIVATE abc(3)
abc(1)=[row1]
abc(2)=[row2]
abc(3)=[row3]
LIST MEMORY LIKE abc
PRIVATE abc(4)
LIST MEMORY LIKE abc
CLEAR MEMORY
RETURN
ENDPROC
运行结果截图:
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
从实验结果来看,应该不是你说的这个原因。我现在最想这里有人拿上面的代码在英文原版的VFP9上运行一下,看看什么结果。从程序本身的角度来讲,我觉得现在的结果是合理的。因为数组定义语句的原理就是重新定义一片连续的内存地址给这个数组,不会因为数组的名称是否相同就会保留原来的值。学过汇编语言的人应该知道,同一数组中的各元素在内存中是占据一片连续地址的,变量名只是为了高级语言使用内存地址方便而采取的一种措施。值是否保留其实不是看表面的变量名,而应该看重新定义了数组后是否还是原来的那片地址。显然,VFP9不是,它在执行数组定义命令后,是另寻一片连续的未用过的地址给程序的。当然,我这个结论也有待英文原版的VFP9去验证。
[
本帖最后由 taifu945 于 2014-2-21 12:22 编辑 ]