Должен ли я объявить переменную Mystruct,
определить свойства Mystruct,
назначить на него указатель и вернуть
указатель
Определенно нет, потому что переменная, определенная в функции (в классе хранения "auto"), исчезнет при выходе из функции, и вы вернете висячий указатель.
Вы можете принять указатель на Mystruct
(ответственность вызывающего абонента за его распределение) и заполнить его; или вы можете использовать malloc
для создания нового (вызывающий абонент обязан освободить его, когда он будет готов). Второй вариант, по крайней мере, позволяет вам сохранить сигнатуру функции, которая вам кажется интересной:
Mystruct *mystruct(int num, int size)
{
Mystruct *p = malloc(sizeof(MyStruct));
....
return p;
}
но часто это уступает - так как вызывающий в любом случае должен иметь обязанности, он также может пойти с первым вариантом и потенциально повысить производительность (если вызывающий может использовать экземпляр автокласса, потому что он знает область использования ограничен).