Чтобы создать и вернуть массив структур в C, вы можете использовать следующие методы:
Метод 1: использование динамического распределения памяти
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
char name[50];
} Person;
Person* createStructArray(int size) {
Person* array = (Person*)malloc(size * sizeof(Person));
return array;
}
int main() {
int size = 5;
Person* array = createStructArray(size);
// Populate the array
for (int i = 0; i < size; i++) {
array[i].id = i + 1;
sprintf(array[i].name, "Person %d", i + 1);
}
// Print the array
for (int i = 0; i < size; i++) {
printf("Person ID: %d, Name: %s\n", array[i].id, array[i].name);
}
// Free the memory
free(array);
return 0;
}
Метод 2: использование автоматического распределения массива
#include <stdio.h>
typedef struct {
int id;
char name[50];
} Person;
Person* createStructArray(int* size) {
// Set the size of the array
*size = 5;
// Declare an automatic array of structs
Person array[*size];
// Populate the array
for (int i = 0; i < *size; i++) {
array[i].id = i + 1;
sprintf(array[i].name, "Person %d", i + 1);
}
// Return a pointer to the array
return array;
}
int main() {
int size;
Person* array = createStructArray(&size);
// Print the array
for (int i = 0; i < size; i++) {
printf("Person ID: %d, Name: %s\n", array[i].id, array[i].name);
}
return 0;
}
В методе 1 мы используем динамическое выделение памяти для создания массива структур. Мы выделяем память с помощью mallocи возвращаем указатель на выделенную память. Не забудьте освободить память, используя free, когда закончите использовать массив.
В методе 2 мы используем автоматическое распределение массива. Размер массива передается как указатель на функцию, и массив создается в стеке. Однако будьте осторожны при возврате указателя на автоматический массив, поскольку память массива будет освобождена после завершения области действия функции.