如何正确将指针传递给函数?

时间:2019-09-23 08:50:08

标签: c++ pointers

我不知道标题是否适合该问题,但我认为我的问题与如何在函数中正确传递指针有关。 所以我有一个链表,该链表由head指向;

让我们假装我有这个链接列表,头指向:{1、2、3、4、5,NULL} 我调用函数NextNode(head),然后给出列表,结果将是head指向2。我想下一次,我调用函数,结果应该指向3,等等。 我希望在调用该函数时,下一个节点不应该总是head-> next,而应该继续。

我有一个将头部作为参数的函数;

struct node
{
  int val;
  node*next;
}
node * create()
{
  node*tmp;
  node *head;
  for (int i = 1; i<6; i = i + 1)
  {
    tmp = new node;
    tmp->val = i;
    tmp->next = head;
    head = tmp;
  }
  return head;
}
node* NextNode(node*current)
{
  if (somethingHappens)
  {
    current = current->next; //this is wrong. Because it's important to not lose the pointer of head;
  }
  return current;
}
int main()

{
  node* result;
  node* another;
  node* head;
  head = create();
  result = NextNode(head);
  std::cout << result->val << std::endl;
  //I call again the function, giving always as paramter the head pointer
  another = NextNode(head);
  std::cout << another->val << std::endl;

  return 0;
}

所以result-> val应该给出2作为结果 而another-> val应该给出3。 但是显然这不会发生,因为头部是固定的。我还有其他方法可以做到这一点吗? 该代码是我想做的伪代码。希望我已经清楚了,英语不是我的母语,所以请耐心等待。

1 个答案:

答案 0 :(得分:0)

another = NextNode(head);更改为another = NextNode(result);。 下次调用NextNode()时,您不会传递从上一个调用获得的下一个节点。

在旁注中,我看到您发布的代码不是有效的代码,或者缺少某些代码并且没有发布;但是这些代码足以理解您的疑问并找出解决方案。