Я знаю, что в C мы не можем вернуть массив из функции, а указатель на массив. Но я хочу знать, что особенного в structs
, что делает их возвращаемыми функциями, даже если они могут содержать массивы.Что особенного в структурах?
Почему упаковка struct
делает следующую программу действующей?
#include <stdio.h>
struct data {
char buf[256];
};
struct data Foo(const char *buf);
int main(void)
{
struct data obj;
obj = Foo("This is a sentence.");
printf("%s\n", obj.buf);
return 0;
}
struct data Foo(const char *buf)
{
struct data X;
strcpy(X.buf, buf);
return X;
}
Вы можете сделать то же самое с «union». Что особенного в профсоюзах? – immibis
Вы должны спросить, почему массивы настолько странны в C. – CodesInChaos
при возврате структуры, если структура не вписывается в пару регистров, а затем «скрытую» память, выделенную компилятором, структура копируется (через memcpy()) в скрытую память, а затем снова скопировали (через memcpy()) tot, которая является переменной struct. Эта «скрытая» память теряется для всех других функций. Два дополнительных вызова 'memcpy()' и потеря «скрытой» памяти являются основной причиной того, что структура не должна быть «передана» или «возвращена из» функции. Лучшая политика - передать указатель на структуру. – user3629249