Массив структур в C

Я пытаюсь создать массив структур и также указателя на тот массив. Я не знаю, как большой массив будет, таким образом, это должно быть динамично. Моя структура выглядела бы примерно так:

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];
5
задан Bill the Lizard 15 December 2012 в 16:38
поделиться

5 ответов

Обычно это делается так:

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
   ...
}
6
ответ дан 14 December 2019 в 04:34
поделиться

Второй вариант указки хорош.

Если вы хотите распределять объекты динамически, попробуйте:

stats_t* theStatsPointer = (stats_t*) malloc( MAX * sizeof(stats_t) );

как предлагает Роланд.

Только не забудьте

free(theStatsPointer);

, когда закончите.

2
ответ дан 14 December 2019 в 04:34
поделиться

На основе ваших ответов на другие ответы похоже, вам нужна динамическая структура данных, например связанный список. Взгляните на набор средств очереди queue (3) .

0
ответ дан 14 December 2019 в 04:34
поделиться

Используйте malloc ():

http://en.wikipedia.org/wiki/Malloc

0
ответ дан 14 December 2019 в 04:34
поделиться

malloc здесь ваш друг.

stats_t stats[] = (stats_t*)malloc(N * sizeof(stats_t));

stats sort of - это указатель на массив. Или вы можете использовать синтаксис stats [3] , как если бы он был явно объявлен как массив.

0
ответ дан 14 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: