リンクされたリストクラスで、リンクされたリストの先頭を参照するポインタを保持しているとしましょう...
このコードを書くときのメンバー関数の1つで...
Node *cur = head;
cur = cur->next;
なぜ頭が変わらないのhead->next
ですか?
私が書いたらcur = NULL
; それは頭になりnull
ますか?
リンクされたリストクラスで、リンクされたリストの先頭を参照するポインタを保持しているとしましょう...
このコードを書くときのメンバー関数の1つで...
Node *cur = head;
cur = cur->next;
なぜ頭が変わらないのhead->next
ですか?
私が書いたらcur = NULL
; それは頭になりnull
ますか?
私はそれ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
あなたが書く場合:
Node *cur = head;
cur = NULL;
その後cur
、何も指さず、何も起こりませんhead
。
あなたが書く場合:
Node *cur = head;
cur = cur->next;
cur = NULL;
wasでない限り、同じことが起こります (cur
何も指さず、何も起こらない)。head
head
NULL
cur = cur->next;
ポインターhead->next
をNULL
介してに設定しようとしている場合は、次のように設定できます。cur
Node *cur = head;
cur->next = NULL;
あなたの混乱はポインターの性質から来ていることがわかります。と同じメモリアドレスを指すポインタをNode *cur = head;
作成していると言うとき。を介して別のものに設定すると、 が指している値ではなく、 が指すもののみが変更されるため、そのままにしておきます。Node
head
cur
cur = NULL
cur
head
cur->next = NULL
代わりに使用すると、 whatを指すnext
メンバーを変更しています。これはwhat のメンバーでもあるため、変更は にも反映されます。cur
next
head
head->next
cur はポインタです。cur = cur->next; 他の場所でcurポイントを作成するだけで、なぜ頭を変える必要があるのですか?