Pascal-pointers

提供:Dev Guides
移動先:案内検索

パスカル-ポインター

Pascalのポインターは簡単で楽しく学ぶことができます。 一部のPascalプログラミングタスクはポインターを使用してより簡単に実行でき、動的メモリ割り当てなどの他のタスクはポインターを使用しないと実行できません。 したがって、完璧なPascalプログラマーになるには、ポインターを学ぶ必要があります。 簡単で簡単な手順で学習を始めましょう。

ご存じのように、すべての変数はメモリロケーションであり、すべてのメモリロケーションには、メモリ内のアドレスを示すポインタ変数の名前を使用してアクセスできるアドレスが定義されています。

ポインターとは

ポインターは動的変数であり、その値は別の変数のアドレス、つまりメモリー位置の直接アドレスです。 他の変数や定数と同様に、ポインターを使用して変数アドレスを保存する前に、ポインターを宣言する必要があります。 ポインタ変数宣言の一般的な形式は-

type
   ptr-identifier = ^base-variable-type;

ポインタタイプは、キャレット記号の上矢印(^)にベースタイプのプレフィックスを付けることで定義されます。 base-typeは、データ項目のタイプを定義します。 ポインター変数が特定の型であると定義されると、その型のデータ項目のみを指すことができます。 ポインター型を定義したら、 var 宣言を使用してポインター変数を宣言できます。

var
   p1, p2, ... : ptr-identifier;

以下はいくつかの有効なポインタ宣言です-

type
   Rptr = ^real;
   Cptr = ^char;
   Bptr = ^ Boolean;
   Aptr = ^array[1..5] of real;
   date-ptr = ^ date;
      Date = record
         Day: 1..31;
         Month: 1..12;
         Year: 1900..3000;
      End;
var
   a, b : Rptr;
   d: date-ptr;

ポインター変数は、同じキャレット記号(^)を使用して逆参照されます。 たとえば、ポインタ_rptr_によって参照される関連変数は_rptr ^ _です。 次のようにアクセスできます-

rptr^ := 234.56;

次の例は、この概念を説明します-

program exPointers;
var
   number: integer;
   iptr: ^integer;

begin
   number := 100;
   writeln('Number is: ', number);

   iptr := @number;
   writeln('iptr points to a value: ', iptr^);

   iptr^ := 200;
   writeln('Number is: ', number);
   writeln('iptr points to a value: ', iptr^);
end.

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Number is: 100
iptr points to a value: 100
Number is: 200
iptr points to a value: 200

Pascalでメモリアドレスを印刷する

Pascalでは、アドレス演算子(@)を使用して、変数のアドレスをポインター変数に割り当てることができます。 このポインターを使用して、データ項目を操作およびアクセスします。 ただし、何らかの理由でメモリアドレス自体を操作する必要がある場合は、ワードタイプ変数に格納する必要があります。

上記の例を拡張して、ポインタ_iptr_に保存されているメモリアドレスを出力します-

program exPointers;
var
   number: integer;
   iptr: ^integer;
   y: ^word;

begin
   number := 100;
   writeln('Number is: ', number);
   iptr := @number;
   writeln('iptr points to a value: ', iptr^);

   iptr^ := 200;
   writeln('Number is: ', number);
   writeln('iptr points to a value: ', iptr^);
   y := addr(iptr);
   writeln(y^);
end.

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Number is: 100
iptr points to a value: 100
Number is: 200
iptr points to a value: 200
45504

NILポインター

正確なアドレスを割り当てることができない場合に備えて、ポインター変数に NIL 値を割り当てることを常にお勧めします。 これは、変数宣言時に行われます。 NIL が割り当てられたポインターはどこにもポイントしません。 次のプログラムを検討してください-

program exPointers;
var
   number: integer;
   iptr: ^integer;
   y: ^word;

begin
   iptr := nil;
   y := addr(iptr);

   writeln('the vaule of iptr is ', y^);
end.

上記のコードをコンパイルして実行すると、次の結果が生成されます-

The value of ptr is 0
*nil* ポインタを確認するには、次のようにif文を使用できます-
if(ptr <> nill )then     ( *succeeds if p is not null* )
if(ptr = nill)then    ( *succeeds if p is null* )

パスカルポインターの詳細

ポインターには多くの簡単な概念があり、Pascalプログラミングにとって非常に重要です。 以下の重要なポインターの概念がいくつかありますが、Pascalプログラマーにとっては明確なはずです-

Sr.No Concept & Description
1

Pascal - Pointer arithmetic

ポインターで使用できる4つの算術演算子があります:増分、減分、+、-

2

Pascal - Array of pointers

配列を定義して、多数のポインターを保持できます。

3

Pascal - Pointer to pointer

Pascalでは、ポインターにポインターを付けることができます。

4

Passing pointers to subprograms in Pascal

参照またはアドレスの両方で引数を渡すと、呼び出されたサブプログラムによって、呼び出されたサブプログラムで渡された引数を変更できます。

5

Return pointer from subprograms in Pascal

Pascalでは、サブプログラムがポインターを返すことができます。