私は伝統的なレコードの配列を持っています。(伝統的な)レコードのフィールドにアクセスする
レコードの開始、フィールドのオフセットおよびフィールドのタイプのアドレスを知っているとき、N番目のレコードのフィールドにアクセスするにはどうすればよいですか?例えば、 。私は予想通り
type
Tstring = string[20];
TRecord = packed record
aInteger : integer;
aDouble : double;
aString : Tstring ;
bString : string;
end;
var
aArray : array[0..N] of Trecord;
p : pointer;
....
p := pointer(cardinal(aArray[5])+12); // 12 = offset of field "aString"
writeln(Tstring(p^);
のように...
これは動作しません。私が間違っているところはどうか?
言語タグを追加して、この文脈で従来のレコードの意味について少し説明してください。 – paisanco
@paisancoは、おそらく[オブジェクトパスカル]のパスカルのようなものです(http://docwiki.appmethod.com/appmethod/1.13/topics/en/Structured_Types#Records_.28traditional.29) –
なぜこれを行う必要がありますか? 'aArray [5]'が 'TRecord'であることを知っているならば、' TRecord(aArray [5])。aString'で直接型キャストしてアクセスするのはなぜですか? –