tableau 2D dynamique - C - Programmation
Marsh Posté le 20-10-2010 à 14:41:36
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.
Marsh Posté le 21-10-2010 à 08:25:02
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.
Marsh Posté le 25-11-2010 à 19:37:27
Code :
|
en 3D c'est pareil sauf que l'acces se fait ainsi
Code :
|
et de façon analogue quel que soit le nombre de dimension...
Marsh Posté le 25-11-2010 à 22:39:36
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.
Marsh Posté le 20-10-2010 à 12:46:00
plop,
j'ai creer un tableau 2D dynamique mais je ne comprend pas trop son fonctionnement :
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 :
merci