Как массив структур записать в динамическую память - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д