C语言 链表查找长度-这两个函数有什么区别?



这两个函数有什么区别吗?我是说根据返回的结果?

int Length(struct node* head) {
  struct node* current = head;
  int count = 0;
  while (current != NULL) {
    count++;
    current = current->next;
  }
  return count;
}

和这个函数

int Length(struct node* head) {
  int count = 0;
  while (head != NULL) {
    count++;
    head = head->next;
  }
  return count;
}

它们是一样的。其中一个使用本地'current'变量来遍历列表,而另一个使用通过函数参数接收的相同变量。

返回的值将是相同的

前一种代码是由程序员按照"修改形参是不好的做法,因为它们是按值传递的,会给读者一种错误的感觉,认为函数会修改相应的实参"的风格规则编写的。

不一定是坏建议。虽然它使代码稍微长了一点,但读起来更好。许多读者看到第二篇文章的第一反应是"等等,什么?"换头?哦……好吧,不,这是安全的...."

无差异。第二个版本只是简单地将函数参数本身作为变量在函数体中使用,这是完全合法的。事实上,它甚至比第一个版本更有效,因为第一个版本做了一个免费的拷贝。

如果实参声明为const(即int Length(struct node* const head)),则不能使用第二个版本,但由于它不是const,因此您可以根据自己的目的自由使用实参变量。

相关内容

  • 没有找到相关文章