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