C语言 如何使用 malloc 为结构数组分配空间



我目前正在动态分配我的结构数组,但我不确定如何继续。这是我的结构:

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);
}

当然,您应该检查失败并在mallocrealloc返回NULL时中止程序。


如果您还想动态分配单词中的每个字符串,那么有几个选项; 最简单的理解是将char word[M]更改为char *word;,每次分配短语时,写the_phrase.word = malloc(some_number);。 如果你分配了一个单词数组,你需要为每个单词循环执行此操作。

我想NM是编译时已知的常量。然后只需使用 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
  };

当然,拥有一系列灵活大小的结构是没有意义的——你需要一系列指向它们的指针。

相关内容

  • 没有找到相关文章

最新更新