3

ポインタへのポインタである変数を宣言する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_handlevariable への型の代入ですxx。どういう意味ですか?NewHandle 関数は何をしますか? (これは の内部関数ですThink Pascal)。実際には、Think Pascalプログラムをに変換する必要がありWindows Pascalます。ただし、関数の説明が見つからず、標準の (など) ポインター関数NewHandleを使用してこの関数を実装する方法がわかりません。New()GetMem()

4

1 に答える 1

3

これは古典的な macos の機能であり、通常は Pascal のものではありません。

正確にはわかりませんが、ロードされたプログラムが非 PM 環境で再配置可能であることと関係がありました。

間接ポインタは OS 関数を介して割り当てられることに注意してください。これはおそらく、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 メーリングリストに登録することをお勧めします。

于 2013-05-03T06:50:57.777 に答える