je vais prendre tes questions dans l'ordre inverse
Oui: tu comprends ce qu'est un pointeur, qui est l'adresse de quoi, et pourquoi tu utilises chaque niveau de pointage (chaque étoile).
en l'occurence, le paramètre de ta fonction prendre l'adresse d'un double pointeur, pour pouvoir le modifier. Si ce n'est pas voulu, autant supprimer la troisième étoile (et la prise d'adresse à l'appel).
...
Le paramètre tDamier de la fonction est une variable appartenant à cette fonction.
La variable locale tDamier de main lui appartient.
Ces deux variables sont donc forcément distincte.
Lors de l'appel de la fonction, son paramètre est créée (sur la pile), et initialisée avec l'expression donnée en argument de l'appel de fonction.
le tDamier de la fonction est donc initialisé avec la valeur &tDamier calculée dans main() donc l'adresse du tDamier de main.
tDamier de main est un pointeur vers tableau de pointeurs vers des tableaux de cases. C'est un damier.
En tant que pointeur, le copier ne copie pas les tableaux pointés (c'est l'intérêt et problème des pointeurs)
tDamier de la fonction est donc l'adresse d'un damier.
Pour accéder à une case, il faut d'abord accéder au damier (par l'étoile), puis descendre dans le tableau de tableaux
Donc, dans la fonction, c'est
(*tDamier)[i][j] qu'il faut utiliser.
C'est dans la fonction que tu utilises mal ton pointeur.
Je n'ai pas regardé, mais si tu n'as pas besoin que la fonction modifie le pointeur en lui même, il est inutile de prendre un triple pointeur, un double pointeur suffit.
Partager