0
typedef struct node{
    int data;
    struct node* next;
}ListNode;

void init(ListNode **head){
    (*head) = (ListNode *)malloc(sizeof(ListNode));
    (*head)->next = 0;
}

ListNode* another_init(){
    ListNode *head = (ListNode *)malloc(sizeof(ListNode));
    return head;
}

我有一些问题:

1.在函数init中,为什么要放一个二级指针?

2.函数 init 和 another_init 一样吗?

4

2 回答 2

1

another_init 与 init 不同。它不会将next指针设置为 0。从 malloc(3) 开始:malloc() 分配 size 字节并返回指向已分配内存的指针。内存没有被清除。

于 2013-08-07T11:37:33.947 回答
0

2.函数 init 和 another_init 一样吗?

如果你使用malloc它们不相等如果你使用calloc它们将是相等的。

1.在函数init中,为什么要放一个二级指针?

如果你坚持 malloc 。您应该将 设置next0

或者你有时会遇到错误。这么想:

也许你有一个 print_link 功能:

void print_link(struct node * head)
{
    node * now = head;
    while(now != NULL)
    {
        print_some_data_you_want;
        now = now->next;
    }
}

如果你只是在使用第二个 init 函数后调用这个函数。你永远不知道会发生什么。

于 2013-08-07T11:39:11.297 回答