我目前正在动态分配我的结构数组,但我不确定如何继续。这是我的结构:
struct Word_setup
{
char word[M];
int count;
} phrase[N];
我知道malloc
返回一个指向内存块的指针,但我不确定当涉及到结构数组时它是如何工作的。
如果有人能澄清一下,将不胜感激!
可能你的意思是:
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);
。 如果你分配了一个单词数组,你需要为每个单词循环执行此操作。
我想N
和M
是编译时已知的常量。然后只需使用 sizeof
, .e.g.
struct Word_setup*ptr = malloc(sizeof(struct Word_setup)*N);
也许您想要一个灵活的数组成员。然后,它应该始终是您struct
的最后一个成员,例如
struct Word_setup {
int count;
unsigned size;
char word[]; // of size+1 dimension
};
当然,拥有一系列灵活大小的结构是没有意义的——你需要一系列指向它们的指针。