Как массив структур записать в динамическую память - C (СИ)
Формулировка задачи:
Привет всем, осваиваю язык Си по-маленьку.
Ума не приложу как этот массив запихнуть в динамическую память?
Программа многофайловая, это один из файлов, с таким кодом все нормально работает.
Но задача этот код изменить, чтобы создавался массив динамически с помощью malloc.
Попробовал так, но не хочет работать:
Может подскажет кто-нибудь как это сделать, а то что-то у меня ни в какую не получается, как ни пробую
ps программа из курса "специалист"
#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;//указатель где искать наших студентов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;//указатель где искать наших студентовРешение задачи: «Как массив структур записать в динамическую память»
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));
};
Объяснение кода листинга программы
В этом коде представлен функционал для работы со статическим и динамическим массивом структур.
- Объявлен массив структур
groupтипаstudentсо статическим размером 20. Этот массив инициализирован пятью структурамиstudent. Каждая структураstudentсодержит три поля:name(строка),age(целое число) иmarks(массив оценок). - В переменной
nstudхранится количество элементов в массивеgroup. Значение переменной равно 5. - В переменной
pstudхранится указатель на первый элемент массиваgroup. - Функция
dynamicобъявлена как статическая и не принимает аргументов. Она выделяет динамическую память под массив структурgroupтипаstudentс динамическим размером 20. - Внутри функции
dynamicуказательgroupинициализируется значениемNULL, а затем меняется на результат вызова функцииmalloc, которая выделяет память под массив структурstudentразмером 20. - После выхода из функции
dynamicуказательgroupхранит адрес выделенного блока памяти. - Поскольку переменная
groupобъявлена внутри функцииdynamic, она является локальной переменной этой функции и не видна за её пределами. Однако указательpstudза пределами функцииdynamicвсё равно может ссылаться на выделенный блок памяти, если его инициализировать результатом вызова функцииdynamic.