Pal*_*rom 2 delphi pascal dynamic-arrays turbo-pascal
我正在研究我的学校项目,我想使用动态(非静态)数组.我使用ObjectPascal,所以我习惯了一些语法.但现在我在旧的TurboPascal编程(我正在使用Turbo Pascal 7 for Windows).
它似乎不知道ObjectPascal,所以我想,你Turbo Pascal不知道动态数组.
如果我的理论是正确与否,有人能告诉我吗?我试图谷歌,但我没有成功.基本上我问"Turbo Pascal 7中的动态数组怎么样?" 谢谢你的所有反应.
正如MartynA所说,Turbo Pascal中没有动态数组类型.您需要使用指针手动分配内存,并且在使用rangechecks时要小心.
通常,您定义数组类型
TYPE
TArrayT = array[0.. ((65535-spillbytes) div sizeof(T))-1] of T;
Run Code Online (Sandbox Code Playgroud)
其中spillbytes是一个小的演绎常量,因为你不能使用整个64k,看看编译器接受什么.
然后定义一个指针
PArrayT= ^TArrayT;
Run Code Online (Sandbox Code Playgroud)
和它的变量
var
P : PArrayT;
Run Code Online (Sandbox Code Playgroud)
并使用getmem分配nrelement元素;
getmem(P,SizeOf(T) * nrelements);
Run Code Online (Sandbox Code Playgroud)
并可选择用零填充它们来初始化它们:
fillchar(p^,SizeOf(T) * nrelements,#0);
Run Code Online (Sandbox Code Playgroud)
您可以使用访问元素
p^[index]
Run Code Online (Sandbox Code Playgroud)
要释放它们,请使用与getmem线完全相反的freemem.
freemem(P,Sizeof(T)*nrelements);
Run Code Online (Sandbox Code Playgroud)
这意味着你必须在某处保存分配的元素数量.这是在Delphi和FPC中修复/解决的.
另请注意,您无法再找到带有范围检查的错误.
如果你想要大于64k的数组,这是可能的,但只有约束,更重要的是TP目标(dos,dos-protected或你使用的Windows)我建议你搜索有很多例子的在线SWAG档案.当然,我建议你去FreePascal/Lazarus,你可以做到:
var x : array of t;
begin
setlength(x,1000000);
Run Code Online (Sandbox Code Playgroud)
并且没有额外的线条就可以完成它而忘记所有这些废话.
| 归档时间: |
|
| 查看次数: |
1836 次 |
| 最近记录: |