Il y a un moment dans l'étude du langage C, où on a l'impression que les
tableaux et les pointeurs sont plus ou moins interchangeables, en un mot
que c'est pratiquement la même chose.
il faut donc être très clair :
un tableau et un pointeur ce n'est pas la même chose.
Quand on déclare, ailleurs qu'en paramètre formel de fonction,
int t[10];
on déclare un tableau, et le compilateur réserve une zone de 10 entiers
consécutifs.
Quand on déclare int *p
, il s'agit toujours d'un pointeur, et le
compilateur réserve simplement un élément de mémoire pouvant contenir un
pointeur.
Les caractéristiques du langage C qui créent la confusion dans l'esprit des
utilisateurs, sont les trois règles suivantes :
- tout identificateur de type tableau de X apparaissant dans
une expression est converti en une valeur constante de type pointeur vers
X, et ayant comme valeur l'adresse du premier élément du tableau ;
- un paramètre formel de fonction, de type tableau de X est considéré
comme étant de type pointeur vers X ;
- la sémantique de l'opérateur d'indexation est la suivante :
T[i]
est équivalent à *(T + i)
.
Sous-sections
Matthieu Moy
2017-02-08