Se connecter avec
S'enregistrer | Connectez-vous

Tableau de tableaux en C, mais ????

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte
Expert Programmation

un champ de bit c'est un entier ou tu utilise chacun de ses bits pour stocker tes 0 et tes 1.

le C possède des opérateurs bien pour faire ça, genre :

mettre un 1 dans le n-ième bit (bien sur n commence à 0) :
nombre |= 1<<n;
mettre un 0 dans le n-ième bit :
nombre &= ~(1<<n);
récuperer la valeur du n-ième bit :
(nombre >> n)&1


nombre est de préférence non signé, et possède une taille suffisante pour pouvoir mettre le nombre de bit que l'on veut. le seul truc c'est que on dépasse pas trop les 64 bit avec ça.

dans ton cas, il faut aussi stocker la taille, donc il faut un autre entier à part.

elch a dit :
un champ de bit c'est un entier ou tu utilise chacun de ses bits pour stocker tes 0 et tes 1.

le C possède des opérateurs bien pour faire ça, genre :

mettre un 1 dans le n-ième bit (bien sur n commence à 0) :
nombre |= 1<<n;
mettre un 0 dans le n-ième bit :
nombre &= ~(1<<n);
récuperer la valeur du n-ième bit :
(nombre >> n)&1


nombre est de préférence non signé, et possède une taille suffisante pour pouvoir mettre le nombre de bit que l'on veut. le seul truc c'est que on dépasse pas trop les 64 bit avec ça.

dans ton cas, il faut aussi stocker la taille, donc il faut un autre entier à part.

ça ne répond pas à la question.
le problème c'est comment définir cette structure avec des longueurs différentes des éléments.

elch a dit :
je comprend plus la, tu veux quoi au juste ?

on oublies les 0 et les 1
je veux un tableau de tableaux d'entiers avec des tailles différentes 3 et 4.
  1. g[0][0] = {1, 0, 0, 1}
  2. g[1][0] = {0, 1, 1}
  3. g[0][1] = {0, 1, 1, 1}
  4. g[1][1] = {1, 0, 1}
  5. g[0][2] = {1, 1, 0, 0}
  6. g[1][2] = {0, 1, 0}

on peut avoir ça facilement ou faut passer par struct ??
Expert Programmation

Si tu veux de la "taille variable", soit tu utilises une zone de taille max pour tous et tu perds de la place pour les petits (le champ de bits est une bonne solution puisque tu ne considères que des booléens), soit tu alloues dynamiquement (avec malloc :whistle:  ) la taille idéale pour chacun. [:spamafote]. Pour chacun des cas, une valeur dans ta structure pour donner la taille de la zone est conseillée :o 
Expert Programmation

J'insiste, cyrano. Comment connais-tu la taille de chaque g[n] ?

  1. struct data_t {
  2. int size;
  3. int * data_p;
  4. };
  5.  
  6. struct data_t g[n];
  7.  
  8. g[i].size = la_bonne_taille;
  9. g[i].data_p = malloc(g[i].size);


Sauf si la_bonne_taille est connue pour tous les g à tout endroit du programme.
Lassé par la pub ? Créez un compte