Либо объявление со ссылкой, либо следующее:
void initializationFunction(A** classPointer);
Дело в том, что вы передаете аргумент-указатель и хотите изменить значение, которое оно имело в вызывающей стороне.Это параметр out , и параметры out должны передаваться по ссылке, а не по значению (здесь ссылка означает либо через указатель, либо через ссылку).Этот параметр out является указателем, поэтому вы должны передать указатель на этот указатель или ссылку на этот указатель.
Другими словами, вам нужно получить доступ к исходному аргументу в стеке вызывающего, чтобы иметь возможность его изменить.В объявлении
void initializationFunction(A* classPointer);
classPointer
сродни локальной переменной, определенной внутри initializationFunction
, и является просто копией classPointer
, выделенной в функции вызывающей стороны.Изменение копии classPointer
не приведет к изменению исходной переменной, поэтому для ее изменения необходим указатель на исходную переменную.То же самое верно, если вы используете ссылку на оригинал classPointer
.
Альтернативный подход, который у вас есть, это возврат нового classPointer
из вашей функции:
A* initializationFunction(void);
в этом случаевызывающий просто сделает:
A* classPointer = initializationFunction();