Je cherche a declarer et définir un pointeur vers un tableau de dimension nxm.
Ce n'est pas ce que tu cherches à faire.
Tu as une définition du genre
si tu veux écrire p = tab, quel est le type de p ? C'est important, parce que l'arithmétique des pointeurs tient implicitement compte de la taille de l'objet pointé.
Dans une telle expression, tab est, comme d'habitude, l'adresse du premier élément du tableau tab. Les éléments du tableau tab sont du type "tableau de M int" : int [M].
Donc tab est du type "adresse d'un tableau de M int" : int (*)[M];
p doit donc être de ce type (et pas du tout du type int**) :
int (*p)[M] = tab // avec les parenthèses
Lorsque tu fais p++, tu passes du tableau tab[0] au tableau tab[1]
1 2 3 4 5
| int i=0;
while (i<4){
printf("%d\n",*(p[0]+i));
i++;
} |
Dans ce code, p[0] (== tab[0]) est du type "adresse du premier élément du tableau tab[0]" soit int *.
Il suffit donc d'un pointeur de ce type, un tableau n'est pas nécessaire:
1 2 3 4 5 6 7 8
|
int * p = tab[0];
int i=0;
while (i<4){
printf("%d\n",*(p+i));
// ou ce qui est équivalent printf("%d\n",p[i]);
i++;
} |
ceci revient à considérer le tableau à deux dimensions comme un tableau à une dimension.
Mat.M :
A ce moment-là il faut utiliser un pointeur de pointeur p**.
Un pointeur de pointeur p** pointera peut pointer sur un tableau à 2 dimensions
Non, il n'y a aucun rapport entre le nombre de dimensions et le nombre "d'étoiles".
int ** p est à utiliser si p est un pointeur sur pointeur sur int (ou sur un élément d'un tableau de pointeurs sur int) , pas sur un tableau de tableaux de int.
Partager