Tableau1 -> Tableau2

Tableau1 -> Tableau2 - C - Programmation

Marsh Posté le 18-02-2007 à 15:08:24    

Bonjour à tous,
 
Je souhaites réaliser un tableau de deux dimensions, qui serait rempli par un tableau temporaire de 10 octets.
Mais je voudrais, que les 10 octets se suivent (c'est à dire réaliser un tableau de 200 octets par exemple pour y mettre 20 tableau temporaire). Je ne sais pas du tout comment réaliser ceci. J'ai beau regarder des cours en C sur les tableaux je ne comprend pas. Si quelqu'un pourrait me mettre sur la piste cela serait sympa :)
 
Merci de m'avoir lu.

Reply

Marsh Posté le 18-02-2007 à 15:08:24   

Reply

Marsh Posté le 18-02-2007 à 15:37:20    

timz a écrit :

Je souhaites réaliser un tableau de deux dimensions, qui serait rempli par un tableau temporaire de 10 octets.
Mais je voudrais, que les 10 octets se suivent (c'est à dire réaliser un tableau de 200 octets par exemple pour y mettre 20 tableau temporaire). Je ne sais pas du tout comment réaliser ceci. J'ai beau regarder des cours en C sur les tableaux je ne comprend pas. Si quelqu'un pourrait me mettre sur la piste cela serait sympa :)


Créer dynamiquement un tableau linéaire de NB_LIN (20) tableaux de SZ_LIN (10) unsigned char (il n'y a pas d'octets en C. C'est une notion 'flux' ou 'réseau', pas mémoire interne)

 
Code :
  1. unsigned char *tab = malloc (NB_LIN * SZ_LIN * sizeof *tab);


Ensuite 2 méthodes. Soit calculer l'adresse des éléments :

Code :
  1. char *adr (char *tab, size_t lin, size_t col)
  2. {
  3.    return tab + lin * SL_LIN + col;
  4. }


soit intialiser un tableau de pointeur avec les adresses des 20 tableau de char

Code :
  1. char *pp[20];
  2.    for (i = 0; i < sizeof pp / sizeof *pp; i++)
  3.    {
  4.       pp[i] = tab + i * SZ_LIN;
  5.    }


ce qui permet ensuite un accès direct

Code :
  1. x = pp[lin][col];
  

 


Message édité par Emmanuel Delahaye le 18-02-2007 à 15:41:48

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 18-02-2007 à 16:16:45    

timz a écrit :

Bonjour à tous,
 
Je souhaites réaliser un tableau de deux dimensions, qui serait rempli par un tableau temporaire de 10 octets.
Mais je voudrais, que les 10 octets se suivent (c'est à dire réaliser un tableau de 200 octets par exemple pour y mettre 20 tableau temporaire). Je ne sais pas du tout comment réaliser ceci. J'ai beau regarder des cours en C sur les tableaux je ne comprend pas. Si quelqu'un pourrait me mettre sur la piste cela serait sympa :)
 
Merci de m'avoir lu.


La méthode d'Emmanuel me semble "compliquée" pour quelqu'un qui débute en C. Moi, je ferais plus simple. c.a.d. définir un simple tableau de [20][10]

Code :
  1. unsigned char tab[20][10];


Là, t'es certain que ton tableau est contiguë en mémoire, c.a.d. que toutes les cases se suivent. Il en résulte que si tu remplis "5" octets à partir de "tab[5][8]" (par exemple), alors le 1er octet ira dans tab[5][8], le second ira dans tab[5][9], le 3° ira dans tab[6][0], le 4° ira dans tab[6][1] et le 5° ira dans tab[6][2].
 
Ensuite, il te suffit d'utiliser "memcpy()" pour copier à chaque "debut de ligne" ton tableau temporaire.
Ex: Imaginons que tes 20 tableaux temporaires se nomment "tmp1", "tmp2", "tmp3", etc..., alors il te suffit d'écrire

Code :
  1. memcpy(tab[0], tmp1, 10);
  2. memcpy(tab[1], tmp2, 10);
  3. <...>
  4. memcpy(tab[19], tmp20, 10);


 
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 18-02-2007 à 18:52:50    

Merci beaucoup je vais utiliser la seconde solution :)

Reply

Marsh Posté le 24-02-2007 à 14:17:17    

Cela marche très bien le memcpy! Merci
 
J'ai une autre question, ma matrice est pleine, je voudrais la réinitialiser entièrement, c'est à dire que tout les valeurs de la matrice soit à 0x00 par exemple.
 
Désolé d'être si "chiant".
 
Merci

Reply

Marsh Posté le 24-02-2007 à 17:11:58    

timz a écrit :

J'ai une autre question, ma matrice est pleine, je voudrais la réinitialiser entièrement, c'est à dire que tout les valeurs de la matrice soit à 0x00 par exemple.
 
Désolé d'être si "chiant".


Ce qui est 'chiant' c'est de répondre à des questions basiques... memset()...
 
Tu n'as donc pas de livre de C ? Tu codes au hasard ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 24-02-2007 à 19:09:51    

timz a écrit :

Cela marche très bien le memcpy! Merci


En général, toutes les fonctions offertes font ce qu'elles sont sensées faire autrement dit toutes "marchent" très bien !!!
 

timz a écrit :

J'ai une autre question, ma matrice est pleine


Pleine ??? Une variable (ou un tableau de variables) ne sont jamais pleines (ni jamais vides). Toute variable contient toujours une valeur !!!
 

timz a écrit :

je voudrais la réinitialiser entièrement, c'est à dire que tout les valeurs de la matrice soit à 0x00 par exemple.


Bon, Emmanuel t'a répondu. Avant de venir demander qu'on te la tienne, essaye un peu de t'assumer. Regarde le "man", va sur google. Le pire, c'est que même s'il n'avait pas existé de fonction qui réponde à ton besoin, tu aurais pu y répondre tout seul avec

  • un peu de réflexion
  • deux boucles imbriquées

(et ceci dans l'ordre que tu préfères)


Message édité par Sve@r le 24-02-2007 à 19:11:52

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed