あるアドレスを基点とした、変位のアドレスの参照
|
バイト列を処理する場合、あるアドレスを基点に
そこから+nバイト目を数バイトずつ処理したい場合があります。
特に文字処理や画像処理ではこの様なことは頻繁に行われます。
Cであれば(p+1)* = '\0'; といったアドレッシングを行えますが、
Pascalでは強引な型キャストでも行わない限りこのような書き方は
行えません。
Pchar(Integer(p) + n)^ := #0;
のようになってしまいます。Integerとポインタのサイズが同じ
であるので、このような書き方でも通ります。
しかし、WORD,DWORDなどもっと大きな型の場合SizeOfなどを使っ
て型のサイズを意識した書き方を行わなければなりません。
PWORD(Integer(pw) + Sizeof(WORD) * n)^ := 0;
このような場合、必要なサイズ分の配列のポインタ型を定義して
やり、その変数に代入することでかなり近い事が行える様になり
ます。
例では、'Delphi 'という文字を、10回繰り返し配列
にセットしています。
type
CharArray = array[0..6] of char;
PCharArray = ^CharArray;
var
p: array[0..100] of Char;
C: PCharArray;
I : Integer;
begin
C := @p;
for I := 0 to 9 do
begin
C^[0] := 'D';
C^[1] := 'e';
C^[2] := 'l';
C^[3] := 'p';
C^[4] := 'h';
C^[5] := 'i';
C^[6] := ' ';
Inc(C);
end;
C^[0] := #0;
Edit1.Text := StrPas(p);
|
|