Есть массив структур в автоматической памяти. Нужно перенести его в динамическую память - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. student* transfer (student* s[])
  2. {
  3. student* s1[15];
  4. int i;
  5. for (i = 0; i < 15; i++)
  6. {
  7. s1[i] = malloc (sizeof(student));
  8. if (s1 == NULL)
  9. {
  10. return NULL;
  11. }
  12. *s1[i] = s[i];
  13. }
  14. return s1;
  15. }
почему нельзя выполнить *s1[i] = s[i]?

Решение задачи: «Есть массив структур в автоматической памяти. Нужно перенести его в динамическую память»

textual
Листинг программы
  1. student* transfer (student s[], size_t size)
  2. {
  3.     student* students = malloc (size*sizeof(student));
  4.     if (s1 == NULL)
  5.         return NULL;
  6.    
  7.     for (size_t i = 0; i < size; i++)
  8.         students[i] = s[i];
  9.  
  10.     return students;
  11. }

Объяснение кода листинга программы

  1. Входные данные: s[] - массив структур типа student, size - размер этого массива.
  2. Выделение памяти под массив указателей на структуры student с помощью malloc: student students = malloc (sizesizeof(student));
  3. Проверка на успешное выделение памяти: if (s1 == NULL) return NULL;
  4. Копирование элементов из массива s[] в массив students[] с помощью цикла for: for (size_t i = 0; i < size; i++) students[i] = s[i];
  5. Возврат указателя на выделенный массив студентов: return students;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы