Да, вам нужно динамически распределять память, т.е. выделять новый блок кучи для каждого нового struct Employee
.
Вы можете сделать это, например, используя realloc
при изменении размера:
yourArrayPtr=realloc(yourArrayPtr,newsize * sizeof(struct Employee));
Функция realloc
в основном назначает новый объем памяти для данных, на которые указывает ее возвращаемое значение. Это удобный способ расширения или сжатия динамически выделяемого массива. newsize
здесь новое количество элементов вашего массива, и оно умножается на размер одной структуры Employee, отображая общий объем пространства, необходимый для вашего нового массива. Возвращаемое значение realloc
присваивается вашему указателю массива, так что он указывает конкретно на это вновь выделенное пространство. В этом случае его можно использовать следующим образом:
struct Employee* emp= NULL;
И тогда, когда вам это нужно:
int n = 8;
emp = realloc (emp, n * sizeof(struct Employee));
Имейте в виду, что вам еще нужно free
эту память.
Теперь вы можете инициализировать и получить доступ к этим данным:
emp[3] = {value1, value2, value3, ...};
Что касается структур, вы также можете подумать о другой структуре данных — связанном списке, где каждая структура содержит указатель на ее преемника. Вы можете прочитать об этом здесь: http://www.cprogramming.com/tutorial/c/lesson15.html
В вашем случае это будет примерно так:
struct Employee{
char* data;
struct Employee* next;
};
person
Michał Szydłowski
schedule
15.02.2015
name
также является указателем, и вам может потребоваться выделить (и освободить) место для него. - person pmg   schedule 15.02.2015