Кажется, что имя Node
является псевдонимом для типа указателя.
Что-то вроде
typedef struct node
{
//...
} *Node;
Так в этом фрагменте кода
Node merged = NULL;
ErrorCode result = mergeSortedLists(left, right, &merged);
переменная merged
является указателем. И он передается по ссылке на функцию mergeSortedLists
.
Это просто плохая идея ввести такой псевдоним для типа указателя, потому что он может только запутать читателей кода.
Если принять, что имя Node является псевдонимом для типа указателя (как, например,
typedef struct node *Node;
, то это объявление функции
ErrorCode mergeSortedLists(Node list1, Node list2, Node *merged_out);
эквивалентно
ErrorCode mergeSortedLists( struct node *list1, struct node *list2, struct node **merged_out);
То есть все три параметра имеют типы указателей.