1

これが私のコードです:

typedef struct node {
    int data;
    struct node *next;
} Node;

void add(Node *head, Node *node) {
    Node *ptr;
    ptr = head;
    if(head==NULL) {
        head=node;
    }
    else {
        while(ptr->next != NULL) {
            ptr = ptr->next;
        }
        ptr->next = node;
    }
}

Node* create(int a) {
    Node *node;
    node = (Node*)malloc(sizeof(Node));
    node->data = a;
    node->next = NULL;
    return node;
}

int main() {
    Node *head;
    head = NULL;
    int i;
    for(i=0; i<10; i++) {
        Node *node;
        node = create(i);
        add(head, node);
    }
}

問題は、addが呼び出されるたびに、関数addでheadが再定義されることです。なぜ ?

4

1 に答える 1

6

あなたがそれを呼び出すときにあなたのポインタのコピーaddを受け取っているからです。その関数で設定しましたが、ローカルコピーが変更され、で指定された他の変数は変更されません。あなたはこのようなことをする必要があるでしょう(私はただ線を変えるだけです;残りは大丈夫に見えます):headheadmain()

  void add(Node **head, Node *node) {
    *head = node;
  }



int main() {
    add(&head, node);
 }
于 2012-10-15T20:15:40.763 に答える