Функция может быть спроектирована так, чтобы возвращать значение, хотя технически нет явной необходимости в этом, при передаче указателя на объект в качестве аргумента для его изменения в функции.
Причина этого в том, что когда у вас есть критическая операция внутри функции, и в этой операции есть ошибка, вы можете вернуть определенное значение c вызывающему, чтобы обозначить, что ошибка произошла внутри функции.
I предполагаю, что позже автор (наполовину) оптимизировал код функции здесь, поскольку его / ее первым намерением, возможно, было добавить такой механизм безопасности или даже подготовить код, чтобы, возможно, позже добавить его, если функция станет более критичной.
Это метод, при котором вы возвращаете переданный указатель, когда операции в функции были успешными, и например, NULL
при ошибке.
Также распространенным методом является переназначение переданного указателя с возвращенным указателем значение, хотя это рискованно, поскольку вы теряете ссылку в вызывающем завершении Например, если в вызываемой функции произошла ошибка.
Поскольку вы увеличиваете указатель в функции, было бы не очень хорошо возвращать увеличенный указатель, так как можно было бы переназначить переданный указатель с возвращаемым значением, например:
int *p = //anything ;
p = foo(p);
Вам нужно либо сохранить переданное значение указателя внутри другой отдельной переменной-указателя, либо увеличить этот указатель «копии» и вернуть переданную переменную параметра
OR
сохранить значение переданного указателя в другую переменную локального указателя, увеличить указатель параметра и вернуть указатель «копировать».
Поэтому может иметь смысл использовать curr
вместо begin_list
для увеличения и используйте begin_list
в качестве возвращаемого значения в случае успеха.
В противном случае NULL
, если произошла ошибка.
Обратите внимание, что вам нужно изменить тип возвращаемого значения с void
на t_list *
, тогда .
Также:
Разница между изменением параметра функции и изменением локальной переменной
A параметр является локальной переменной.