【问题标题】:Different pointers in linked list [duplicate]链表中的不同指针[重复]
【发布时间】:2018-05-15 22:15:07
【问题描述】:

我正在研究C中的单链表,我想问一下为什么我们给作为参数,例如,在插入函数void insert_element(struct Node** head, int element)双指针,但在显示函数void display_list(struct Node* head)单指针指向头。它们都给出相同的地址(我们用& 调用插入函数)。我们使用双指针是因为我们修改了插入或删除元素的列表?

【问题讨论】:

  • 另一种选择是struct Node *insert_element(struct Node *head, int element),哪个 IMO 更好。这样,您就不会乱用指针指向指针,但您确实需要分配返回值 head = insert_element(head, x)
  • 可能想在display_list 中也使用const 来表示该函数不会改变列表的内容

标签: c


【解决方案1】:

如果新元素成为头部,则必须修改头部。只是显示列表,头部不可能改变。

【讨论】:

    【解决方案2】:

    所以当你想修改基本对象时,你传递它的指针。因此,如果您想在另一个函数中修改 int 变量,您可以将指针传递给它。指针也是如此,要修改指针,您需要指向它的指针,否则您的修改将在您调用的函数中是本地的。所以从代码的角度来看,你有:

    void insert_element(struct Node** head, int element) {
        struct Node* newNode;
        *head = newNode;
    }
    

    如果你有这样的事情:

    void insert_element(struct Node* head, int element) {
        struct Node* newNode;
        head = newNode;
    } 
    

    第一个将获取头部的地址并对其进行修改,第二个将修改head它自己并且将是insert_element()函数的本地。

    另一方面,display_element 函数不需要修改地址的内容,它所需要的只是指向开始的指针。

    【讨论】:

      猜你喜欢
      • 2013-08-07
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多