Хотя вопрос обсуждается много раз, я пока не нашел удовлетворительного ответа. Когда для возврата данных от функции на обращайтесь в или передать сообщение с ссылкой, чтобы изменить данные по адресу? Классический ответ - передать переменную в качестве ссылки на функцию, когда она станет большой (чтобы избежать копирования стека). Это выглядит так, как будто структура или массив. Однако возврат указателя из функции не является чем-то необычным. На самом деле некоторые функции из библиотеки C в точную вещь. Например:C: Когда нужно вернуть значение или передать ссылку
char *strcat(char *dst, const char *src);
Всегда возвращает указатель на пункт назначения даже в случае ошибки. В этом случае мы можем просто использовать переданную переменную и оставить возврат для того, что она (как это делает большинство).
При взгляде на структуры я вижу то же самое, что происходит. Я часто возвращаю указатели, когда функции только должны использоваться при инициализации переменных.
char *p = func(int i, const char *s);
Тогда есть аргумент, что переменные стоп-копий дороги, и поэтому использовать указатели вместо этого. Но, как упомянуто here, некоторые компиляторы могут сами решить это (предполагая, что это относится и к C). Есть ли общее правило или, по крайней мере, какое-то неписаное соглашение, когда использовать тот или иной? Я оцениваю производительность выше дизайна.
Звучит скорее как http://programmers.stackexchange.com/ question – cup
Возвращающиеся указатели обычно приводят к проблеме управления жизненным циклом, на которую указывает объект, потому что 90% времени, pointee вновь создается функцией. – user3528438
Пример с 'strcat' верен для API старого стиля. Новый код ошибки возврата: errno_t strcat_s ( char * strDestination, size_t numberOfElements, const char * strSource ) '. – i486