Pascal声明指向指针的变量的目的是什么?我在Mac Think Pascal中有一个代码。以下是我不理解的代码中的一些部分:
type
my_array = array[1..100] of integer;
my_array_pointer = ^my_array;
my_array_handle = ^my_array_pointer;
...
var
xx : my_array_handle;
...
begin
xx:= my_array_handle(NewHandle( sizeof(my_array)) );
如您所见,最后一行是my_array_handle
类型到变量xx
的分配。这是什么意思? NewHandle功能有什么作用? (这是Think Pascal
)的内部函数。实际上,我需要将Think Pascal
程序转换为Windows Pascal
。但是我找不到NewHandle
函数的描述,也不知道如何使用标准(New()
,GetMem()
等)指针函数来实现这个函数。
答案 0 :(得分:3)
这是一个经典的macos功能,通常不是Pascal。
我不确切知道,但它与非PM环境中加载程序的可重定位性有关。
请注意,间接指针是通过OS函数分配的,这可能意味着它是在OS维护的某个表中分配的。 (这样操作系统可以移动/重新定位程序?)
在现代Mac(和其他)编程中,这整个原则是陌生的。干净吧。
<强>(添加)强> 如果你想保留这些重定向,你可以试试运气:
function newhandle( nrbytes:integer):ppointer;
var xx : ppointer;
begin
new(xx);
getmem(xx^,nrbytes);
newhandle:=xx;
end;
我最初没有添加此内容,但我建议您只需清理这些不合时宜的间接引用,并直接使用基于my_array_pointer的指针和getmem或new。
这些间接引用的含义在非m68k Classic Mac OS系统上没有用,虽然后来的PPC版本仍然有点支持它们。 (PPC始终是保护模式)
如果你真的想要粗略的细节,你可能想订阅mac-pascal列表。