我正在努力动态分配我的结构数组,我不确定如何继续。这是我的结构:
struct Word_setup
{
char word[M];
int count;
} phrase[N];
我知道malloc
返回一个指向内存块的指针,但是我不确定它在结构数组中是如何工作的。
如果有人可以请澄清,将非常感谢!
答案 0 :(得分:1)
可能你的意思是:
struct Word_setup {
char word[M];
int count;
};
最好避免在与结构定义相同的行中定义变量,以帮助提高代码的可读性。
然后你可以分配这些数组:
int main()
{
struct Word_setup *phrase = malloc(N * sizeof *phrase);
// use phrases[x] where 0 <= x < N
phrase = realloc(phrase, (N+5) * sizeof *phrase);
// now can go up to phrases[N+4]
free(phrase);
}
当然,如果malloc
或realloc
返回NULL
,您应检查失败并中止该计划。
如果你还想在单词中动态分配每个字符串,那么有几个选项;最简单的理解是将char word[M]
更改为char *word;
,每次分配短语时,请写the_phrase.word = malloc(some_number);
。如果你分配一个单词数组,你需要为每个单词循环执行。
答案 1 :(得分:0)
我认为N
和M
是编译时已知的常量。然后只需使用sizeof
,.e.g。
struct Word_setup*ptr = malloc(sizeof(struct Word_setup)*N);
也许你想要一个flexible array member。然后,它应该始终是struct
的 last 成员,例如
struct Word_setup {
int count;
unsigned size;
char word[]; // of size+1 dimension
};
当然,拥有一组灵活大小的结构是没有意义的 - 你需要一个指向它们的数组。