gpt4 book ai didi

pointers - (Think) Pascal 中指向指针的指针和 NewHandle 函数

转载 作者:行者123 更新时间:2023-12-02 19:34:16 25 4
gpt4 key购买 nike

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()等)指针函数。

最佳答案

这是一个经典的 macOS 功能,通常不是 Pascal 的功能。

我不太清楚,但这与非 PM 环境中加载的程序的可重定位性有关。

请注意,间接指针是通过操作系统函数分配的,这可能意味着它是在操作系统维护的某个表中分配的。 (以便操作系统可以移动/重新定位程序?)

在现代 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 列表。

关于pointers - (Think) Pascal 中指向指针的指针和 NewHandle 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16352150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com