在不知道其子结构的大小的情况下将内存分配给结构的指针是否有效?

Is it valid to allocate memory to a structure's pointer without knowing the size of its sub-structures?

考虑以下代码:

#include<stdio.h>

struct word {
    char* data;
};

struct sentence {
    struct word* data;
    int word_count;
};

struct paragraph {
    struct sentence* data  ;
    int sentence_count;
};

struct document {
    struct paragraph* data;
    int paragraph_count;
};

void main()
{
    int total_paragraph = 5;   //I'm myself assigning total number of paragraphs for simplicity
    
    struct document doc;
    
    doc.data = malloc(total_paragraph*(sizeof(struct paragraph)));  //Statement which I have a doubt!!!

    ....
    ....
    ....
}

首先,从逻辑上讲,语句(malloc one,我有疑问)是否有效?

如果是,计算机如何在不知道 struct paragraph 的大小(因为我们还没有 malloc 其内容,指针 data 指向结构句类型)?

在没有定义子结构的情况下分配结构是不可能的。毕竟,如果不知道子结构的大小,就无法知道结构的大小。

但是,struct paragraph 不包含任何子结构。它包含一个结构指针、一个 int 和可能的填充。所有这些东西的大小都是已知的。

您发布的代码非常好。

without knowing the size of struct paragraph (as we haven't malloced its content, the pointer data pointing to a struct sentence type)? c pointers struct

为什么我们需要 malloc 一个结构来知道它的大小?这个结构的大小是多少?

struct document {
    struct paragraph* data;
    int paragraph_count;
};

它有一个指针和一个整数。指针具有固定大小(在 64 位机器上通常为 64 位,在 32 位机器上通常为 32 位)并且整数具有固定大小(通常为 32 位)。因此,以字节为单位的结构大小为 sizeof(any_pointer) + sizeof(int) + 填充。这三个都是编译器已知的。