我正在尝试创建一个结构数组,也是一个指向该数组的指针。我不知道阵列有多大,所以它应该是动态的。我的结构看起来像这样:
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];
答案 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():
答案 3 :(得分:0)
malloc
是你的朋友。
stats_t stats[] = (stats_t*)malloc(N * sizeof(stats_t));
stats
是指向数组的指针。或者您可以使用stats[3]
语法,就像它被明确声明为数组一样。
答案 4 :(得分:0)
根据您对其他答案的回复,您似乎需要一个动态数据结构,如链接列表。看一下queue(3)
设施。