2012-08-17 6 views
0

Disons que je ces:tableau STRUCT struct [Objective-c]

typedef id Title; 

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

Jusqu'à présent, le code est correct. Mais le problème est ici:

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

Comme ce que je l'ai dit dans le commentaire dans le code, je veux faire du livre sous forme de tableau afin qu'il puisse tenir un certain nombre de livres. Est-ce que c'est possible? Si c'est le cas, comment puis-je le faire?

+3

'Livre de livre [10];' – hmjd

Répondre

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

ou

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

dans ce dernier cas, vous devrez utiliser malloc pour allouer le tableau.

+0

Merci! C'est ce que je cherche. Donc je vais utiliser le pointeur car j'ai besoin de la taille pour être dynamique. – yoninja

0

Notez que vous pouvez utiliser a flexible array member pour obtenir cet effet:

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

Ceci est un élégant cas d'utilisation parce que vous avez la simplicité d'utilisation d'un tableau statique, mais si vous avez besoin d'allouer un objet Shelf de la taille sz, il suffit de faire un 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; 
} 

littéraux composés et les membres du groupe flexibles que j'ai utilisé ci-dessus sont des caractéristiques C99, donc si vous programmez avec VC++, il pourrait ne pas être disponible .