delphi.gif (306 バイト) ポインタの操作


toach.gif (917 バイト) PascalのポインタとCのポインタ

PascalのポインタもCのポインタもアドレスであることには変わりません。しかし、Cのポインタは整数のように演算が可能ですが、Pascalのポインタは比較などはできるものの、直接+、-などはできません(Inc,Decは可能)。

 

toach.gif (917 バイト) ポインタを宣言するには

ポインタを宣言するには^を型の前に付けます。

整数を指すポインタ

var p: ^Integer; // Cの場合はint *p;

型なしポインタ

var p: Ponter; // Cの場合はvoid *p;

 

toach.gif (917 バイト) ポインタが指す変数の値を得るには

ポインタが指す変数の値を得るにはポインタの^を付けます。

value := p^; // Cの場合はvalue = *p;

 

toach.gif (917 バイト) 変数を指すポインタを作るには

変数を指すポインタは@演算子で作ることができます。

var
  i: Integer;
  p: ^Integer;  // 整数へのポインタ
begin
  i := 100;
  p := @i;
  writeln('@i = ', p^);
end.

 

toach.gif (917 バイト) 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.

toach.gif (917 バイト) Inc,Decの使い方

Inc,Decを使ってポインタの指すアドレスを変更できます。

var
p: PChar;
i: Smallint;

p := StrAlloc(80);
for i :=1 to 80 do
begin
  p^ := 0;.
  Inc(p);
end;