Salut,
A vrai dire, elle n'a pas énormément de sens du simple fait que, quand tu déclare un tableau (uni ou multi dimentionnel), tu déclare aussi... un pointeur sur le premier élément, qui sert de pointeur sur le tableau lui meme...
Hormis que l'un serait une allocation statique et que l'autre serait une allocation dynamique, le deux codes suivants seraient sensiblement pareils (disposer de 2*3*4=24 caractères, et en prenant quand meme un sérieux raccourcis):
1 2 3 4 5
|
char MaVar[2][3][4];
char *ptr;
ptr=malloc(sizeof (char*2*3*4));
//en n'oubliant pas de vérifier la réussite de l'allocation ;-) |
Il est à noter que la représentation en mémoire sera exactement pareille, identique meme à un simple char MaVar[24], la seule différence apparaissant au niveau du nombre de cases mémoires qui sont passées lors de l'incrémentation de chaque dimention
Si tu déclare un tableau (uni ou multi dimentionnel) de pointeurs sous la forme de
il s'agira alors de veiller à ce qu'une adresse mémoire soit fournie pour chacun des 24 pointeurs dont du disposera...soit par allocation dynamique, soit par affectation d'une adresse à laquelle se trouve déjà un (tableau de) caractère(s)
Pour un tableau à deux ou trois dimentions ne contenant "que" 24 éléments (qu'il s'agisse de caractères ou de pointeurs

), il est peut etre tout aussi facile de décider de travailler sur un tableau à une seule dimention et de faire le calcul soi meme:
Avec x, y et z représentant les positions recherchées respectives
1 2 3
|
char caractrer[24];
caractere[12*z+4*y+x]; |
donnerait exactement le meme résultat que
1 2 3
|
char caractere[2][3][4];
caractere[z][y][x]; |
Partager