Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1180 connectés 

  FORUM HardWare.fr
  Programmation
  C

  tableau 2D dynamique

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tableau 2D dynamique

n°2030845
sliders_al​pha
Posté le 20-10-2010 à 12:46:00  profilanswer
 

plop,
 
j'ai creer un tableau 2D dynamique mais je ne comprend pas trop son fonctionnement :
 

Code :
  1. long **Tab;
  2.      Tab = NULL;
  3.    
  4.      Tab = new long*[n]; 
  5.                                
  6.      for(i=0; i<p; i++)
  7.               {
  8.               Tab[i] = new long[p];
  9.               }


 
pourquoi je dois mettre deux etoile?
 
je veux dire, je pourrais tres bien creer un tableau de n case (donc un pointeur avec n case reservé derriere) et le remplir par la suite avec des pointeur sans le preciser au compilo non?
 
genre :

Code :
  1. long *Tab
  2.      Tab = new long[lignes];
  3.      for(i=0; i<colonnes; i++)
  4.               {
  5.               Tab[i] = new long[colonnes];
  6.               }


 
merci

mood
Publicité
Posté le 20-10-2010 à 12:46:00  profilanswer
 

n°2030903
olivthill
Posté le 20-10-2010 à 14:41:36  profilanswer
 

En fait, en C, les tableaux à plus d'une dimension n'existent pas. On n'a que des tableaux à une dimension. Pour simuler une deuxième dimension, on fait un tableau vers des tableaux de une dimension.
 
Dans la déclaration, long **Tab, les deux étoiles signifient que Tab contient l'adresse d'une case mémoire qui contient une adresse qui contient un long. Si une adresse est codée sur 10 octets (10 est juste une valeur d'exemple, en fait c'est plutôt 4 ou 8), alors la déclaration dit de réserver une zone mémoire de dix octets. Mais ce n'est pas tout. Cette déclaration dit aussi au compilateur de vérifier que ce qui va être mis dans cette zone sera bien des pointeurs vers des long.
 
Dans la déclaration, long *Tab, la réservation en mémoire est la même qu'avant, c'est-à dire la réservation de 10 octets pour une adresse. Mais cette déclaration prévoit que l'on va mettre des long , et donc le compilateur émettra un avertissement ou une erreur quand on voudra affecter autre chose qu'un long dans une case de Tab.


Message édité par olivthill le 20-10-2010 à 14:44:37
n°2031073
el muchach​o
Comfortably Numb
Posté le 21-10-2010 à 08:25:02  profilanswer
 

Je propose d'interdire de répondre à cette question, voire qu'on ferme systématiquement les topics portant sur les tableaux à 2D. Les neuneus qui arrivent et posent pour la 50e fois la même question sans faire la moindre recherche, ça commence à bien faire.

n°2038524
Ivanovitch
I ARE SO SKILLED
Posté le 25-11-2010 à 19:37:27  profilanswer
 

Code :
  1. //allocation d'un tableau 2D de taille taille_tableau_x * taille_tableau_y
  2. long* tab = (long*)malloc( sizeof(long) * taille_tableau_x * taille_tableau_y ) );
  3. //accès aux cases du tableau :
  4. for(int y = 0; y < taille_tableau_y; y++)
  5. for(int x = 0; x < taille_tableau_x; x++)
  6.         tab[x + y*taille_tableau_y] = ma_valeur;
  7. //ne pas oublier de librer la ram après :
  8. free(tab);
  9. tab=NULL;
 

en 3D c'est pareil sauf que l'acces se fait ainsi

 
Code :
  1. tab[x + y*taille_y + z*taille_y*taille_z];
 

et de façon analogue quel que soit le nombre de dimension...

 


Message édité par Ivanovitch le 25-11-2010 à 19:39:00
n°2038542
Joel F
Real men use unique_ptr
Posté le 25-11-2010 à 22:39:36  profilanswer
 

non no Non NON.
L'acces linearisé est l'acces le plus lent qui soit ... il est aussi impraticable pour l'extraction de sous région.
 
LA bonne manière de faire est la technique des NRC:
 
http://codepad.org/K2WAwRBP
 
Point.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  tableau 2D dynamique

 

Sujets relatifs
afficher valeur tableau echo' 'Données tableau VB Xpress 2008
PB à l'affichage des actualités dynamiqueTableau de structures
indices tableau imbriquésAccesseur sur un tableau
Création dynamique de boutons[Javascript] Tableau de fonctions et Array.prototype
Signature dynamiqueTableau dynamique 2D
Plus de sujets relatifs à : tableau 2D dynamique


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR