Я пытаюсь создать массив структур и также указателя на тот массив. Я не знаю, как большой массив будет, таким образом, это должно быть динамично. Моя структура выглядела бы примерно так:
typedef struct _stats_t
{
int hours[24]; int numPostsInHour;
int days[7]; int numPostsInDay;
int weeks[20]; int numPostsInWeek;
int totNumLinesInPosts;
int numPostsAnalyzed;
} stats_t;
... и у меня должны быть несколько из этих структур для каждого файла (неизвестная сумма), что я проанализирую. Я не уверен, как сделать это. Мне не нравится следующий подход из-за предела размера массива:
# define MAX 10
typedef struct _stats_t
{
int hours[24]; int numPostsInHour;
int days[7]; int numPostsInDay;
int weeks[20]; int numPostsInWeek;
int totNumLinesInPosts;
int numPostsAnalyzed;
} stats_t[MAX];
Таким образом, как я создал бы этот массив? Кроме того, был бы, указатель на этот массив посмотрит что-то это?
stats_t stats[];
stats_t *statsPtr = &stats[0];
Обычно это делается так:
size_t n = <number of elements needed>
stats_t *ptr = malloc (n * sizeof (stats_t));
Затем, чтобы заполнить,
for (size_t j = 0; j < n; ++j)
{
ptr [j] .hours = whatever
ptr [j] .days = whatever
...
}
Второй вариант указки хорош.
Если вы хотите распределять объекты динамически, попробуйте:
stats_t* theStatsPointer = (stats_t*) malloc( MAX * sizeof(stats_t) );
как предлагает Роланд.
Только не забудьте
free(theStatsPointer);
, когда закончите.
На основе ваших ответов на другие ответы похоже, вам нужна динамическая структура данных, например связанный список. Взгляните на набор средств очереди queue (3)
.
malloc
здесь ваш друг.
stats_t stats[] = (stats_t*)malloc(N * sizeof(stats_t));
stats
sort of - это указатель на массив. Или вы можете использовать синтаксис stats [3]
, как если бы он был явно объявлен как массив.