Как массив структур записать в динамическую память - C (СИ)

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

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

Привет всем, осваиваю язык Си по-маленьку. Ума не приложу как этот массив запихнуть в динамическую память?
#define N 20
 
static student group[N] = 
    {
        {"Ivanov",          {5,4,4}},
        {"Petrashevsky",    {4,3,4}},
        {"Kim",             {5,3,5}},
        {"Pupkin",          {4,2,3}},
        {"Kuzin",           {5,5,5}}
    };
    int nstud = 5;//сколько сейчас реально присутствует(5 чел)
    student *pstud = group;//указатель где искать наших студентов
Программа многофайловая, это один из файлов, с таким кодом все нормально работает. Но задача этот код изменить, чтобы создавался массив динамически с помощью malloc. Попробовал так, но не хочет работать:
int nstud = 5;//сколько сейчас реально присутствует(5 чел)
 
student *group = (student *) malloc(N * sizeof(student));
student group[] =
    {
        {"Ivanov",          {5,4,4}},
        {"Petrashevsky",    {4,3,4}},
        {"Kim",             {5,3,5}},
        {"Pupkin",          {4,2,3}},
        {"Kuzin",           {5,5,5}}
    };
 
student *pstud = group;//указатель где искать наших студентов
Может подскажет кто-нибудь как это сделать, а то что-то у меня ни в какую не получается, как ни пробую ps программа из курса "специалист"

Решение задачи: «Как массив структур записать в динамическую память»

textual
Листинг программы
#include <stdlib.h>
#include <string.h>
#include "data.h"
 
#define N 20
 
void dynamic(void);
 
static student group[N] =
    {
        {"Ivanov",          {5,4,4}},
        {"Petrashevsky",    {4,3,4}},
        {"Kim",             {5,3,5}},
        {"Pupkin",          {4,2,3}},
        {"Kuzin",           {5,5,5}}
    };
int nstud = 5;
student *pstud = group;
 
void dynamic(void)
{
student *group = NULL;
group = (student *)malloc(N * sizeof(student));
};

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

В этом коде представлен функционал для работы со статическим и динамическим массивом структур.

  1. Объявлен массив структур group типа student со статическим размером 20. Этот массив инициализирован пятью структурами student. Каждая структура student содержит три поля: name (строка), age (целое число) и marks (массив оценок).
  2. В переменной nstud хранится количество элементов в массиве group. Значение переменной равно 5.
  3. В переменной pstud хранится указатель на первый элемент массива group.
  4. Функция dynamic объявлена как статическая и не принимает аргументов. Она выделяет динамическую память под массив структур group типа student с динамическим размером 20.
  5. Внутри функции dynamic указатель group инициализируется значением NULL, а затем меняется на результат вызова функции malloc, которая выделяет память под массив структур student размером 20.
  6. После выхода из функции dynamic указатель group хранит адрес выделенного блока памяти.
  7. Поскольку переменная group объявлена внутри функции dynamic, она является локальной переменной этой функции и не видна за её пределами. Однако указатель pstud за пределами функции dynamic всё равно может ссылаться на выделенный блок памяти, если его инициализировать результатом вызова функции dynamic.

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

14   голосов , оценка 4.214 из 5
Похожие ответы