C中的结构数组

时间:2010-04-04 21:15:38

标签: c arrays struct

我正在尝试创建一个结构数组,也是一个指向该数组的指针。我不知道阵列有多大,所以它应该是动态的。我的结构看起来像这样:

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 个答案:

答案 0 :(得分:6)

这就是通常的做法:

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
   ...
}

答案 1 :(得分:2)

指针的第二个选项很好。

如果您想动态分配内容,请尝试:

stats_t* theStatsPointer = (stats_t*) malloc( MAX * sizeof(stats_t) );
正如罗兰所暗示的那样。

请不要忘记

free(theStatsPointer);

当你完成。

答案 2 :(得分:0)

使用malloc():

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

答案 3 :(得分:0)

malloc是你的朋友。

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

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

答案 4 :(得分:0)

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