ポインタの操作
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;