-1

temp2temp1いくつかの構造体 x へのポインターです。

struct FunkyStruct x;
struct FunkyStruct *temp1 = &x, *temp2 = &x;

さて、次の行の実行後:

temp2=temp1;
temp1=temp1->nxt;

...同じメモリ位置を指し続けますかtemp2? temp1そうでない場合は、なぜそれらが異なるのかを説明してください。

4

8 に答える 8

10

最初は、temp1temp2の両方に のメモリ アドレスが含まれていますx

temp2 = temp1temp1は「 ~の値を代入する」という意味temp2です。これらは開始時の値が同じであるため、このコマンドは何もしません。

この式temp1->nextは、「指すデータ構造の中を見てtemp1、フィールドの値を返す」という意味nextです。したがって、 の値をにtemp1 = temp1->next代入します。(もちろん、ルックアップは割り当ての に行われます。)フィールドにたまたま含まれていた値が含まれるようになりました。古い値と同じである場合もあれば、異なる場合もあります。temp1->nexttemp1temp1next

于 2008-09-20T22:50:35.283 に答える
7

これは Java のバックグラウンドに基づいた質問のように聞こえますか?

dysfunctorが与えた答えは良いです。

重要なことは、C ではポインターの割り当ては整数の割り当てと変わらないということです。

元のコードに次の変更を加えることを検討してください。

 int temp1 = 1;
 int temp2;
 temp2=temp1;
 temp1=temp1 + 1;

この temp1 の最後は 2、temp2 は 1 です。

Java で (非プリミティブ) オブジェクトを割り当てるのとは異なります。割り当てでは、値ではなくオブジェクトへの参照が実際に割り当てられます。

于 2008-09-20T23:42:28.950 に答える
2

temp2 は更新されませんが、temp1 は次の項目を指します。したがって、temp1 が 0x89abcdef で temp1->next が 0x89b00000 の場合、完了後、temp1 は 0x89b00000 になり、temp2 は 0x89abcdef になります。

もちろん、リンクされたリストを作成していると仮定します。

于 2008-09-20T22:41:27.553 に答える
1

あなたは質問に答えるのに十分な情報を提供していません。それらは同じ構造体を指し始めていますか、それとも両方とも構造体 x へのポインター型だけですか? また、構造体 x の場合、nxt フィールドの定義は何ですか?

于 2008-09-20T22:42:44.727 に答える
1

違う。

temp1 が最初に指すアドレスを temp2 に保存しました。次に、temp1 が指す先の変数ではなく、temp1 が指す先を変更しました。

もしやっていたら

temp2 = temp1;
*temp1 = temp1->foo;

temp1 と temp2 は両方とも (同じ) 変更された変数を指します。

于 2008-09-20T22:43:11.433 に答える
1

いいえ、C のようなポインターがあると仮定します。temp2 は x の場所を指し、temp1 は nxt ポインターが指すものを指します。通常、これは単一リンク リストのレイアウトです。

于 2008-09-20T22:44:59.043 に答える
0

短い答えはノーです。ただし、最初にnxtがtemp1temp2の両方と異なる場合のみ。

temp1=temp1->nxt; =演算子で区切られた 2 つの部分があります。これらは:

  • 右側のtemp1->nxtは、 temp1が指す構造体を検索し、 nxt変数の値を取得します。これはポインタ (新しいメモリ位置) です。
  • 次に、右側のポインターを使用してtemp1の値を更新します。
于 2008-09-21T07:34:07.257 に答える
0

x (したがって x.nxt) は、コンパイラ、コンパイラ オプション、およびランタイム環境の組み合わせに応じて、指定されていない値に初期化されます。temp1 と temp2 はどちらも x を指します (temp1=temp2 の前後)。次に、temp1 には x.nxt の値が割り当てられます。

最終的な答え: 0 < Pr(temp1 == temp2) << 1、なぜなら temp1 == temp2 iff x.nxt == &x.

于 2008-09-21T03:47:57.550 に答える