Tableau et pointeur, c'est la même chose ?

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 :

  1. 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 ;

  2. un paramètre formel de fonction, de type tableau de X est considéré comme étant de type pointeur vers X ;

  3. 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