这两个功能有什么区别吗?我的意思是返回的结果?
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;
}
答案 0 :(得分:6)
他们是一样的。一个使用本地“当前”变量迭代列表,而另一个使用通过函数参数接收的相同变量。
答案 1 :(得分:0)
返回的值将是相同的。
前者是由订阅样式规则的程序员编写的一种代码,该规则说“修改参数是不好的做法,因为它们是按值传递的,并且会让读者误认为函数会修改相应的参数。“
不一定是坏建议。然而,它使代码更长一点,但它读得更好。很多读者都会看到第二个并且初步反应是“等等,什么?换头?哦......好吧,不管它是安全的......”
答案 2 :(得分:0)
没有区别。第二个版本只是使用函数参数本身作为变量在体内工作,这是完全合法的。事实上,它甚至比制作无偿副本的第一版更有效率。
如果参数被声明为const,你不能使用第二个版本,即int Length(struct node* const head)
- 但由于它不是,你可以自由地使用参数变量。