Длина поиска связанного списка - в чем разница между этими двумя функциями? - PullRequest
0 голосов
/ 12 сентября 2011

Есть ли разница между этими двумя функциями?Я имею ввиду в терминах возвращаемого результата?

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;
}

Ответы [ 3 ]

6 голосов
/ 12 сентября 2011

Они одинаковы.Один использует локальную переменную «current» для перебора списка, а другой - ту же переменную, которая была получена через аргументы функции.

0 голосов
/ 12 сентября 2011

Без разницы. Вторая версия просто использует аргумент функции как переменную для работы в теле, и это совершенно законно. Фактически, это даже немного более эффективно, чем первая версия, которая делает бесплатную копию.

Вы не могли бы использовать вторую версию, если аргумент был объявлен как const, т.е. int Length(struct node* const head) - но поскольку это не так, вы можете использовать переменную аргумента для своих собственных целей.

0 голосов
/ 12 сентября 2011

Возвращаемое значение будет таким же.

Первый тип - это код, который будет написан программистом, подписывающимся на правило стиля, которое гласит: «Это плохая практика - изменять параметры, потому что они передаются».по значению и дал бы читателю ложное ощущение, что функция изменила бы соответствующий аргумент. "

Не обязательно плохой совет.Это делает код немного длиннее, но читается лучше.Многие читатели смотрят на второе и имеют первоначальную реакцию: «подожди, что? Меняешь голову? О… хорошо, нет, это безопасно…» *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...