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;

Shelf静的配列を使用するのは簡単なので、これは洗練された使用例ですが、 sizeのオブジェクトを割り当てる必要がある場合は、次のsz1 つだけを行う必要があります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 に答える