3

リンクされたリストの先頭ノードでfoo(struct node *n)ある関数を指定しました。nここで、リストの最後を指す stfooを変更する必要があります。n

しかし、これはこの関数シグネチャで可能ですか?

tリストの最後へのポインターであると仮定します。

  • n = tポインターが値渡しされるため、機能しません。
  • *n = *tリストの先頭を上書きするため、機能しません。

私は何か見落としてますか?

4

6 に答える 6

6

ポインターへのポインターを使用する必要があります。

foo(struct node **n) 

nを指すかを変更するには、次のようにします。

*n = t;
于 2011-04-03T19:08:26.900 に答える
5

いいえ、渡されたポインターの値のコピーがあるためです。渡された元のポインターにアクセスすることはできません。関数の外部でポインターを変更するには、sig を foo( struct node にする必要があります。 **n)。

于 2011-04-03T19:09:20.853 に答える
4

あなたは何も見逃していません。指定された関数宣言では不可能です。

あなたが書いたように、ポインターは値で渡されるため、変更された場合、元の変数には反映されません。

プロトタイプをfoo(struct node **n);orに変更し、struct node *foo(struct node *n);結果として新しいポインターを返す必要があります。

于 2011-04-03T19:09:39.400 に答える
4

いいえ、値で渡された引数を変更することはできません。

于 2011-04-03T19:10:56.780 に答える
1

n変更して発信者に変更を表示させることはできません。変更することはできn->prev->nextますが、n->next->prevそれが必要な場合があります。

于 2011-04-03T19:09:06.683 に答える
0

呼び出し元の関数に変更を反映することはできません。ですが、中fooは思う存分着替えることができnます。

int foo(struct node *n) {
    n = NULL; /* ok */
}
于 2011-04-03T19:08:43.693 に答える