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]; 

这是通常的方式:

 size_t n =  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); 

当你完成了。

使用malloc():

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

malloc是你的朋友。

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

stats sort 指向数组的指针。 或者您可以使用stats[3]语法,就像它被明确声明为数组一样。

根据您对其他答案的回复,您似乎需要一个动态数据结构,如链接列表。 看一下queue(3)的设施。