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

现在就我对指针指针的理解而言,当我调用这个函数时

添加节点(&n)

(n定义为节点*n)我发送指针n的地址。头 = &n 到现在为止?在 1 我使 ptr 指向 n 即 ptr = &n? 那正确吗?我不明白为什么我需要设置 *head = ptr?ptr 不是已经直接对 n 进行更改了吗?而且 ptr 和 *head 不都指向 n 吗?

谢谢!

4

2 回答 2

1

ptr 是 *head 的工作副本。和

node *ptr = *head;

你复印一份。如果您使用 ptr,则不会更改 head,因为您复制了指针而不是 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 回答