#c #function #struct
Вопрос:
Я пытаюсь определить структуру внутри функции и вернуть эту структуру в конце функции, но не могу найти правильный способ сделать это. Например:
struct Animals test() {
struct Animals {
int* age;
char* name;
}
return struct Animals;
}
Комментарии:
1. Так не работает. Структура должна быть определена в области, где она видна всем функциям, которые ее используют. Если вы пытаетесь создать тип динамически, C этого не делает.
2. Вы также не указываете имя типа в
return
операторе, это должно быть выражение.3. Вы можете переместить его и вернуть указатель на созданную структуру. Если вы выделите его статически, он окажется в кадре стека вызова функции и будет недействительным после его возврата.
4. Определения структур не являются переменными, они являются определениями типов. Сначала вы определяете структуру, а затем объявляете переменные этого типа позже.
Ответ №1:
Могу ли я вернуть структуру a из функции, в которой эта структура определена?
Нет.
Я пытаюсь определить структуру внутри функции
Не делай этого. struct
Сначала определите.
struct Animals {
int age; // int makes more sense here than `int *`
char* name;
};
Затем верните struct
. Значение объекта может быть определено внутри test()
, но структура объекта должна быть определена снаружи и до test()
.
struct Animals test(void) {
// v------ compound literal -----------------v
return (struct Animals){.age = 42, .name = "fred" };
}
Будьте осторожны с управлением тем, на что .name
указывает участник.