0

Linked List の add 関数を書いているときに、次のコードを思いつきました

    int addNode(node ** head)
        {
1.      node * ptr = *head;
        if(ptr==NULL)
        {
            ptr = (node *)malloc(sizeof(node));
            ptr->next = NULL;
            ptr->val = (char *)malloc(10);
            strcpy(ptr->val,"1");
2.          *head = ptr;
        }//Rest omitted

ポインターからポインターへの私の理解が進む限り、この関数を呼び出すと

addNode(&n)

(n はノード * n として定義されます) ポインター n のアドレスを送信します。head = &n 今のところ? 1 で、ptr が n を指すようにします。つまり、ptr = &n? そうですか?私が理解できないのは、なぜ *head = ptr を設定する必要があるのですか? ptr はすでに n を直接変更していませんか? そして、ptr と *head の両方が n を指していませんか?

ありがとう!

4

2 に答える 2

1

ptr は *head の作業コピーです。と

node *ptr = *head;

あなたはコピーを作成します。ptr を使用する場合、ptrptr ではなくポインターをコピーしたため、ヘッドへの変更は行われません。head は n と同じです。関数内の n の名前です。したがって、ptrはnを変更しません-次の行を使用します

*head = ptr;

n を変更します。

于 2014-05-27T08:33:30.663 に答える
0

最初にノードを追加する場合は、次のようにします。

int     addNode(node **head)
{
  node  *ptr;

  if ((ptr = malloc(sizeof(*ptr))) != NULL)
    {
      ptr->val = (char *)malloc(10);
      strcpy(ptr->val,"1");
      ptr->next = *head;
      *head = ptr;
    }
}
于 2014-05-27T08:35:38.560 に答える