Comment mettre en œuvre un tableau en 2 dimensions de struct en C
Je suis en train d'essayer de comprendre comment mettre en œuvre un tableau en 2 dimensions de la structure dans C. Mon code plante tout le temps et je suis vraiment sur le point de le laisser finir comme toutes mes démarches se ferme à C: poubelle. C'est ce que j'ai:
typedef struct {
int i;
} test;
test* t[20][20];
*t = (test*) malloc(sizeof(test) * 20 * 20);
Mon glorieux erreur:
error: incompatible types lors de l'affectation de type ‘struct test *[20]’ from type ‘struct test *
Dois-je allouer la mémoire séparément pour chaque 2ème dimension? Je suis de noix. Il devrait être si simple. Un jour je bâtirai un temps-machine et de le magnétiser certains compilateur c disquettes...
OriginalL'auteur PenthousePauper | 2010-07-18
Vous devez vous connecter pour publier un commentaire.
Ce devrait être suffisant:
Qui déclare un tableau en 2 dimensions de
test
de taille 20 x 20. Il n'y a pas besoin d'utiliser malloc.Si vous voulez allouer dynamiquement de votre tableau, vous pouvez le faire:
OriginalL'auteur IVlad
Fixe. Je déteste c.
OriginalL'auteur BobTurbo
D'autres réponses montrent comment le réparer, mais ils n'expliquent pas pourquoi. Comme le compilateur a laissé entendre, le type de
t
dans votre exemple original est en faittest *[20]
c'est pourquoi votre plâtre pourtest *
n'était pas assez.En C, le nom d'un tableau T de dimension N est en fait de type
*T[dim0][dim1]...[dimN-1]
. Amusant.OriginalL'auteur msw
De mon observation, vous ne pouvez pas savoir exactement ce que vous voulez et de les confondre sur la structure et l'arithmétique des pointeurs. S'il vous plaît aller à travers les 2 possibilités.
1) Un tableau à deux dimensions où chaque élément a un pointeur vers
test
.Dans ce cas, le la mémoire de tous les pointeurs vers
test
s sont déjà statiquement alloué.Mais, le de la mémoire de la vraie
test
s ne sont pas prêts.Dans ce cas, vous devez remplir le
test [i][j]
un par un.Chacun des
test
est discret dans la mémoire et vous avez l'avantage de créer ou de détruire individuellement de façon dynamique.2) Un tableau à deux dimensions avec chaque élément est un
test
.Dans ce cas, le la mémoire de tous les
test
s sont déjà alloué.Aussi, le de la mémoire de la vraie
test
s sont prêts à utiliser sans préparation supplémentaire.Tous les
test
s sont en continu dans la mémoire comme un gros bloc et il est toujours là. Cela signifie que vous pouvez perdre une partie de la mémoire si vous avez uniquement besoin de toustest
s à certaines heures de pointe et la plupart du temps vous n'utilisez que quelques-uns d'entre eux.OriginalL'auteur ttchong
Également, aussi longtemps que votre dimension intérieure de la taille est constante, vous pouvez attribuer un nombre variable de compte de cette dimension intérieure
OriginalL'auteur Johannes Schaub - litb