« Programmation C/Pointeurs » : différence entre les versions

Contenu supprimé Contenu ajouté
Tados (discussion | contributions)
→‎Tableaux dynamiques : Modification du code
Tados (discussion | contributions)
→‎Tableaux dynamiques : modification du texte
Ligne 147 :
Cet exemple alloue un tableau de 256 cases. Bien que la variable soit un pointeur, il est dans ce cas permis d'accéder aux cases de 0 à 255, soit entre les adresses <code>&tableau[0]</code> et <code>&tableau[255]</code>, incluses.
 
=== Tableaux dynamiques à plusieursdeux dimensions ===
 
Tout comme on pouvait déclarerallouer des tableaux statiques à plusieurs dimensions, on peut déclarerallouer des tableaux dynamiques à plusieurs dimensions. Pour déclarerce un tel tableaufaire, on déclarecommence deslà-aussi par déclarer un pointeurs approprié : un pointeur sur des pointeurs (etc.) sur des types. Pour déclarer un tableau dynamique d'entiers à deux dimensions :
 
<source lang="c">
int ** matrice;
</source>
 
L'allocation d'un tel objet va se dérouler en plusieurs étapes (une par étoile), on alloue d'abord l'espace pour un tableau de pointeurs vers entier. Ensuite, on alloue pour chacun de ces tableaux l'espace pour un tableau d'entiers. Si on veut une matrice 4x5 :
 
<source lang="c">
#define LIGNES 4
#define COLONNES 5
int i;
 
int ** matrice = malloc(sizeof *matrice * LIGNES);
 
Ligne 165 ⟶ 168 :
}
</source>
 
LeIl programmeurne confirméfaut n'oubliejamais évidemment jamaisoublier de libérer la mémoire allouée précédemment. Ainsi, à tout appel de <code>malloc();</code> doit correspondre un appel de <code>free();</code>
Pour libérer l'espace alloué pour une telle structureci-dessus, on procède de manière inverse, onen commencecommençant par libérer chacune des lignes du tableau, puis le tableau lui même :
<source lang="c">
for(i = 0; i < LIGNES; i++)
Ligne 175 ⟶ 179 :
</source>
 
=== Tableaux dynamiques à trois dimensions ===
Voici maintenant un exemple d'une fonction créant un tableau à trois dimensions avec des expressions génériques et surtout les tests des valeurs de retour des fonctions <code>malloc();</code> appelées (usage conseillé) :
 
Voici maintenant un exemple d'une fonction créant un tableau à trois dimensions avec dessurtout, expressionset génériquesc'est ettrès surtoutimportant, les tests des valeurs de retour des fonctions <code>malloc();</code> appelées (usage conseillé) :
<source lang="c">
int *** malloc_3d(int nb_tableau, int lignes, int colonnes)