这两个函数有什么区别吗?我是说根据返回的结果?
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,因此您可以根据自己的目的自由使用实参变量。