Вы можете возвращениеstruct
из функции, как в ForceBru's answer, или вы можете создатьstruct
в C dynamic memory (он же в куче), используя malloc
и возврата указатель на него, например
struct foo_st {
int num;
const char* str;
};
struct foo_st*
/* the second argument s should practically be a literal string */
make_foo (int n, const char* s) {
struct foo_st* p = malloc(sizeof(struct foo_st));
if (!p) { perror("malloc foo"); exit(EXIT_FAILURE); };
p->num = n;
p->str = s;
return p;
}
Ваш main
(или какой-либо другой функции) может впоследствии сделать struct foo_st*fooptr = make_foo(32, "abc");
, но кто-то должен вызывать free(fooptr)
(или, по крайней мере, free
адрес, который был внутри fooptr
).
Конечно, вы не должны забывать free
a malloc
-указатель, когда он становится бесполезным. Бойтесь memory leaks, buffer overflow и undefined behavior. Узнайте больше о malloc(3) & free
.
BTW, на практике вам следует решить, кто несет ответственность за free
-память. В приведенном выше примере make_foo
предполагается, что второй параметр - make_foo
- это буквальная строка (если она равна malloc
, например, с использованием strdup(3), вам нужно будет free
в другом месте, и это становится очень грязным).
На практике вы должны документ конвенции о , который отвечает к free
некоторые динамически ранее malloc
ованные памяти. Возможно, вы захотите использовать valgrind (если ваша система имеет его), и, если использовать недавний компилятор GCC, его -fsanitize=address option для поиска ошибок, связанных с памятью. Очень часто вы выполняете код как для создания, так и для уничтожения функций (например, here или here).
Возможно, вы захотите прочитать о garbage collection (по крайней мере, чтобы понять концепции, такие как reference counting и терминология). Возможно, позже вы захотите использовать Boehm's conservative garbage collector.
поможет, если вы отправите код – Sarang
У меня нет кода. Это задание. Они дают вам параметры для подражания, и вы должны сами его спроектировать. –
Возможно, вы потерялись в лингвистике? Функция не может создать тип (и hey, struct - это тип, поэтому создание структуры означает создание типа, правильно?) - это все еще что-то, что программист должен делать, в статически типизированных языках, таких как C. Он может создавать * объекты * определенных типов, хотя это, вероятно, имеет значение этого в назойливом естественном языке, который мы используем. –