2013-08-07 46 views
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; 
} 

我有一些问题:2种初始化链表的方法,它们是否相等?

1.in功能初始化,为什么我应该把第二级指针?

2.函数init与another_init相同吗?

+3

好吧,首先,'another_init'错过了将'0'分配给'next'。 –

+1

可能重复[传递数组,在C中int指针](http://stackoverflow.com/questions/4916716/passing-arrays-pointers-to-int-in-c) – 2013-08-07 11:36:56

+0

这:^^因为在C中,参数按值传递(“复制”)。 – 2013-08-07 11:37:16

回答

1

another_init不是“与init”相同的。它不设置下一个 - 指向0.从malloc(3):malloc()分配大小字节并返回指向已分配内存的指针。内存不被清除。

0

2.函数init与another_init相同吗?

如果您使用malloc它们不相等如果您使用calloc,它们将相等。

1.in函数init,为什么要放第二个等级指针?

如果你坚持使用malloc。您应该将next设置为0

或者你会在某个时候面对错误。认为这:

也许你有一个PRINT_LINK功能:

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

如果您只是调用这个函数中使用第二初始化功能之后。你永远不知道会发生什么。

相关问题