Pascal-ポインタ

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

上記の例を拡張して、ポインタ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プログラミングにとって非常に重要です。Pascalプログラマーには明らかなはずの、以下のいくつかの重要なポインターの概念があります。

シニア番号 コンセプトと説明
1 パスカル-ポインタ演算

ポインタで使用できる算術演算子は、インクリメント、デクリメント、+、-の4つです。

2 Pascal-ポインタの配列

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

3 Pascal-ポインタへのポインタ

Pascalを使用すると、ポインタの上にポインタを置くことができます。

4 Pascalのサブプログラムへのポインターの受け渡し

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

5 Pascalのサブプログラムからポインタを返す

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