以下のPascalコードはどういう意味ですか?
p^.rlink=q
q^.llink=p
パスカル演算子は、CおよびC++の演算子に^.
似ています。->
ポインタを逆参照し(この場合p
はとして定義する必要がありvar p: ^type
ます)、レコード内の変数(この場合は)にアクセスしrlink
ますllink
。
ポインタ変数の後にcaret(^)が表示されると、ポインタを逆参照します。つまり、ポインタが保持しているメモリアドレスに格納されている値を返します。したがって、あなたの場合、それはプロパティを持つレコードへのポインタであり、プロパティp
を持つレコードへのポインタであると思います。これらのプロパティは、とが割り当てられるため、同じ構造へのポインタでもあります。この構造は、左右のノードを持つ二分木データ型を表していると思います。rlink
q
llink
p
q
可能性が高いのは、pとqが二重リンクリストの要素であり、多くの場合、双方向リンクリストと呼ばれることです。これらの2つのステートメントは、「左」にp、「右」にqを付けて、それらを結合しています。C /C++での同等のものは次のようになります。
p->rlink = q;
q->llink = p;
は^
ポインタの後に続き、.
レコードのメンバーにアクセスします。したがって、これらの線は、おそらくある種のグラフのリンクを再配置しています。
pとqはポインタのように見えます。それらは、それぞれ(またはおそらく両方)、rlinkとllink(右リンクと左リンクを推測)を持つレコード変数を指します。
このスニペットは、おそらくグラフまたはリンクされた種類のリストのコンテキストで使用されます。
Pascalのcaret(^)演算子は、ポインターではなく変数の内容にアクセスできるようにする逆参照演算子です。
C言語で直接同等のものは
(p*).rlink=q
(q*).llink=p
もちろん、これは通常、次のように表されます。
p->rlink=q
q->llink=p
Cの->演算子を使用して、1つのステップで遅延とメンバーアクセスを実行します。