2012-08-17 74 views
0

讓說我有這些:結構數組中的結構[目的-C]

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; 

什麼樣的事情我在代碼中的註釋所說的,我要讓簿作爲數組,這樣它可以容納一定數量的書。這甚至有可能嗎?如果是這樣,我該怎麼做?

+3

'Book book [10];' – hmjd 2012-08-17 09:35:10

回答

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分配數組。

+0

謝謝!這是我正在尋找的。所以我要使用指針,因爲我需要動態的大小。 – yoninja 2012-08-17 09:54:47

0

請注意,您可以使用a flexible array member達到這種效果:

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

這是一個優雅的使用情況,因爲你必須使用一個靜態數組中的簡單,但如果你需要分配大小的Shelf對象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++可能無法使用。