2

リンクされたリストクラスで、リンクされたリストの先頭を参照するポインタを保持しているとしましょう...

このコードを書くときのメンバー関数の1つで...

Node *cur = head;
cur = cur->next;

なぜ頭が変わらないのhead->nextですか?

私が書いたらcur = NULL; それは頭になりnullますか?

4

3 に答える 3

7

私はそれheadがであると仮定していNode *ます。この場合、cur = cur->nextどこを指すかを変更していると言うとcur、それheadが指す場所を変更していないため、リストの先頭を指すままになります。

Cur----------|
             |
             V       next
Head -----> Item 1--------->Item 2

cur = cur->next次の結果が得られます。

Cur--------------------------|
                             |
                     next    V      
Head -----> Item 1--------->Item 2
于 2013-01-10T22:51:23.133 に答える
2

あなたが書く場合:

Node *cur = head;
cur = NULL;

その後cur、何も指さず、何も起こりませんhead

あなたが書く場合:

Node *cur = head;
cur = cur->next;
cur = NULL;

wasでない限り、同じことが起こります (cur何も指さず、何も起こらない)。headheadNULLcur = cur->next;

ポインターhead->nextNULL介してに設定しようとしている場合は、次のように設定できます。cur

Node *cur = head;
cur->next = NULL;

あなたの混乱はポインターの性質から来ていることがわかります。と同じメモリアドレスを指すポインタをNode *cur = head;作成していると言うとき。を介して別のものに設定すると、 が指している値ではなく、 が指すもののみが変更されるため、そのままにしておきます。Nodeheadcurcur = NULLcurhead

cur->next = NULL代わりに使用すると、 whatを指すnextメンバーを変更しています。これはwhat のメンバーでもあるため、変更は にも反映されます。curnextheadhead->next

于 2013-01-10T22:48:10.370 に答える
1

cur はポインタです。cur = cur->next; 他の場所でcurポイントを作成するだけで、なぜ頭を変える必要があるのですか?

于 2013-01-10T22:49:24.523 に答える