5

以下のPascalコードはどういう意味ですか?

p^.rlink=q
q^.llink=p
4

5 に答える 5

13

パスカル演算子は、CおよびC++の演算子に^.似ています。->

ポインタを逆参照し(この場合pはとして定義する必要がありvar p: ^typeます)、レコード内の変数(この場合は)にアクセスしrlinkますllink

于 2009-11-29T07:45:26.350 に答える
4

ポインタ変数の後にcaret(^)が表示されると、ポインタを逆参照します。つまり、ポインタが保持しているメモリアドレスに格納されている値を返します。したがって、あなたの場合、それはプロパティを持つレコードへのポインタであり、プロパティpを持つレコードへのポインタであると思います。これらのプロパティは、とが割り当てられるため、同じ構造へのポインタでもあります。この構造は、左右のノードを持つ二分木データ型を表していると思います。rlinkqllinkpq

于 2009-11-29T07:42:25.407 に答える
3

可能性が高いのは、pとqが二重リンクリストの要素であり、多くの場合、双方向リンクリストと呼ばれることです。これらの2つのステートメントは、「左」にp、「右」にqを付けて、それらを結合しています。C /C++での同等のものは次のようになります。

p->rlink = q;
q->llink = p;
于 2009-11-29T07:50:51.767 に答える
0

^ポインタの後に続き、.レコードのメンバーにアクセスします。したがって、これらの線は、おそらくある種のグラフのリンクを再配置しています。

于 2009-11-29T07:43:15.340 に答える
0

pとqはポインタのように見えます。それらは、それぞれ(またはおそらく両方)、rlinkとllink(右リンクと左リンクを推測)を持つレコード変数を指します。

このスニペットは、おそらくグラフまたはリンクされた種類のリストのコンテキストで使用されます。

Pascalのcaret(^)演算子は、ポインターではなく変数の内容にアクセスできるようにする逆参照演算子です。

C言語で直接同等のものは

(p*).rlink=q
(q*).llink=p

もちろん、これは通常、次のように表されます。

p->rlink=q
q->llink=p

Cの->演算子を使用して、1つのステップで遅延とメンバーアクセスを実行します。

于 2009-11-29T07:45:32.630 に答える