0

假设我有这些:

typedef id Title;

typedef struct{
    Title title;
    int pages;
}Book;

到目前为止,代码还可以。但问题就在这里:

typedef struct{
   int shelfNumber;
   Book book;   //How can I make this an array of Book?
}Shelf;

就像我在代码中的注释中所说的那样,我想将 Book 作为数组,以便它可以容纳许多书籍。这甚至可能吗?如果是,我该怎么做?

4

2 回答 2

1
typedef struct{
    int shelfNumber;
    Book book[10];   // Fixed number of book: 10
 }Shelf;

或者

typedef struct{
    int shelfNumber;
    Book *book;     // Variable number of book
 }Shelf;

在后一种情况下,您将不得不使用malloc来分配数组。

于 2012-08-17T09:35:06.377 回答
0

请注意,您可以使用灵活的数组成员来实现此效果:

typedef struct {
    int shelfNumber;
    size_t nbooks;
    Book book[];
} Shelf;

这是一个优雅的用例,因为您可以简单地使用静态数组,但是如果您需要分配一个Shelfsize 的对象sz,您只需要做一个malloc

Shelf *mkShelf(int num, size_t sz) {
    Shelf *s = malloc(sizeof(Shelf) + sz * sizeof(Book));
    if (!s) return NULL;
    *s = (Shelf){ num, sz };
    return s;
}

我上面使用的复合文字和灵活的数组成员是 C99 特性,所以如果你使用 VC++ 编程,它可能不可用。

于 2012-08-17T10:09:08.667 回答