私はリンクリスト内のノードへのポインタを持っている:NULLにポインタを設定すると、指していた元のアイテムに影響しますか?
struct node *temp = head.next
私はこのポインタを設定した場合のようなNULL
に等しい:
temp = NULL;
これも私が指していたノードに影響を与えるのだろうか?すなわちhead.next
はNULL
になりましたか?
私はリンクリスト内のノードへのポインタを持っている:NULLにポインタを設定すると、指していた元のアイテムに影響しますか?
struct node *temp = head.next
私はこのポインタを設定した場合のようなNULL
に等しい:
temp = NULL;
これも私が指していたノードに影響を与えるのだろうか?すなわちhead.next
はNULL
になりましたか?
これは私が指していたノードにも影響しますか?すなわち、head.nextはNULLになりましたか?
号
head.next
は、値(アドレス)を保持する変数です。あなたは
struct node *temp = head.next
を行うと今temp
もhead.next
と同じ値を持っています。
その後、temp
の値を変更すると、head.next
の値が変更されるのはなぜですか。
あなたは変数の値(何が起こっている。この場合である)をコピーしたときにこれが違いです、そしてあなたは、変数を作成し、いくつかの他の変数を参照し、その内容を変更します。
あなたは後者を望むなら、あなたはtemp
からもhead.next
の内容を変更したい場合は今、あなたは
struct node **temp = &head.next;
ようpointer to pointer to struct node
何かを必要とします
*temp = NULL;
@Vucko @STF、芸術は私の意見で誤解を招いています。これは 'temp'が' head.next 'を指していることを意味しますが、実際には 'temp'と' head.next'はどちらも他のノード構造を指しています。 –
@HassanNadeem、そうです - 私はそれを変更します – STF
いいえ、そうではありません。ポインターを更新するときには、その内容やポインターが指していたメモリーの場所を更新しないことを理解しておく必要があります。そのためには明示的に行う必要があります。あなたの問題のために今
:
temp
はどこ頭部>次の常駐メモリ位置のアドレスを保持しています。何か(0x980901)のようにnullに設定すると、指していたアドレスだけが変更されます。今は何も指摘しません。
私はあなたにこのことを説明しましょう。あなたが紙を持っていて、それにあなたの友人の家の住所が書かれているとします。あなたはこの紙に書かれた内容を消すことはあなたの友人が彼の家から引っ越されたことを意味しますか?明らかにそうではありません。
あなたの場合、この用紙は一時ポインタです。
上記の回答はすべて非常によく説明されていますが、ポインタの学習を始めたばかりの人には分かりづらいかもしれません。
temp
とhead.next
の両方は、タイプがstruct node *
の変数です。ちょうどポインタを忘れて、struct node *
の変数が両方ともint
の場合、あなたの質問について考えてみてください。今すぐ戻ってあなたの質問に
int a = 1;
int b = a;
b = 0;
// a remains 1, b is 0
:
は、このアナロジーを参照してくださいstruct node* head.next = 1; // Some initial value
struct node* temp = head.next; // temp now has the value of 1
temp = NULL; // temp assigned the value of NULL, variable head.next remains unchanged
ポインタを持つ魔法や特殊なものは何もありませんが、彼らは他の変数型と同じ規則に従います。
は考えてみましょう:
int x = 5;
int y = x;
y = 0;
もちろんのy = 0;
意志がx
の値を変更しません。同じことがあなたの例にも当てはまります。
私はあなたが何とか指差しの変数の内容を変更することと混同していると思います。あなたの代わりに
int x = 5;
int* y = &x;
*y = 0;
を行いたい場合次に*y = 0;
はx
を変更します。しかしy
は変更されず、まだ変更されません。x
C++の参照変数を除いて、1つの変数を設定することは決して別の変数に影響しません。 – Barmar
この質問は逆に尋ねることができ、本質的に同じです。 'struct node * temp = NULL; temp = head.next; '' NULL'は 'head.next'になりますか?もちろんそうではありません...それは絶対に意味をなさないでしょう。 – Sebivor
私の答えに使った類推を調べてください。 :P:D –