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