ポインタの操作
PascalのポインタとCのポインタ
PascalのポインタもCのポインタもアドレスであることには変わりません。しかし、Cのポインタは整数のように演算が可能ですが、Pascalのポインタは比較などはできるものの、直接+、-などはできません(Inc,Decは可能)。
ポインタを宣言するには
ポインタを宣言するには^を型の前に付けます。
例 整数を指すポインタ
var p: ^Integer; // Cの場合はint *p;
例 型なしポインタ
var p: Ponter; // Cの場合はvoid *p;
ポインタが指す変数の値を得るには
ポインタが指す変数の値を得るにはポインタの^を付けます。
例 value := p^; // Cの場合はvalue = *p;
変数を指すポインタを作るには
変数を指すポインタは@演算子で作ることができます。
例
var i: Integer; p: ^Integer; // 整数へのポインタ begin i := 100; p := @i; writeln('@i = ', p^); end.
Newの使い方
New(P) は新しい動的変数を作成し,P をその変数のポインタに設定します。不要になった動的変数はDisposeで廃棄します。
例
program PointerTest2; uses SysUtils; {$APPTYPE CONSOLE} type PInt = ^Integer; var p: PInt; q: PInt; begin New(p); p^ := 100; New(q); q^ := p^; p^ := 200; writeln('p^ = ', p^); writeln('q^ = ', q^); Dispose(p); Dispose(q); end.
Inc,Decの使い方
Inc,Decを使ってポインタの指すアドレスを変更できます。
例
var
p: PChar;
i: Smallint;
p := StrAlloc(80);
for i :=1 to 80 do
begin
p^ := 0;.
Inc(p);
end;