くだすれDelphi(超初心者用)その20
■ このスレッドは過去ログ倉庫に格納されています
0830ななしへたぐらま ◆XcB18Bks.Y
NGNG『Object Pascal言語ガイド』より(Delphi 4版ですが)―――
・静的配列型,レコード型,集合型の関数結果の場合,値が1バイトを占有する場合はALに,値
が2バイトを占有するときにはAXに,値が4バイトを占有する場合はEAXに結果が返される。そ
の他の場合は,宣言されたパラメータのあとに関数に渡される追加のvarパラメータに結果が返さ
れる。
―――ということでレコード型では値渡しにはならないようですが,
1レコード全体の内容をコピーすることには変わりなく,
それによるオーバーヘッドが無くなるわけではないので
大きなレコードを大量に処理するような場合は影響が出るかもしれません.
一方,レコード型の値をポインタで渡すことは変ではないと思います.
私のつたない経験ではむしろレコード型のポインタ型にする方が使いやすいと思います.
なぜならレコードの一部だけを変更する処理がシンプルになるからです.
レコード型ならこんな感じ:
Rec := NantokaObj.Records[i];
Rec.FamilyName := 'Sato';
NantokaObj.Records[i] := Rec;
ポインタならこんな感じ:
NantokaObj.Records[i]^.FamilyName := 'Sato';
※ポインタの場合でもレコード全体をコピーする場合は以下のようにそれぞれ1行で書けます.
NantokaObj.Records[i]^ := Rec;
Rec := NantokaObj.Records[i]^;
■ このスレッドは過去ログ倉庫に格納されています