Массив структур в Си - PullRequest
       7

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

5 голосов
/ 05 апреля 2010

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

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 ]

6 голосов
/ 05 апреля 2010

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

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
   ...
}
2 голосов
/ 05 апреля 2010

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

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

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

как подсказывает Роланд.

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

free(theStatsPointer);

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

0 голосов
/ 05 апреля 2010

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

0 голосов
/ 05 апреля 2010

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

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

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

0 голосов
/ 05 апреля 2010

Использовать malloc ():

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...