next up previous contents index
Next: Représentation unidimensionnelle des matrices Up: No Title Previous: L'opération & et le

Pointeurs et tableaux

    

Ces deux types de données présentent des similarités et des différences importantes. Si l'on définit

  int t[4];
  int *p;

il y a allocation de mémoire pour 4 entiers dans le premier cas, mais pas d'allocation dans le second. On a vu cependant que la valeur de t était l'adresse du bloc alloué. On peut donc affecter cette adresse à p :

  p = t;

Après cette affectation, les deux expressions *p et t[0] ont la même valeur. L'affectation inverse t = p; est illégale car t est une constante, pas une variable. Au niveau des valeurs, pointeurs d'int et tableaux d'int sont de même type.


  
Figure 14: Affectation d'un tableau à un pointeur
\begin{figure}
 \begin{center}
 \leavevmode
 
\fbox {
 \epsfig{file=fig/array_ptr1.eps}
 }
 \end{center} \end{figure}

Si l'on a une fonction sur les tableaux

void f(int[]);

on peut l'appeler avec un pointeur en argument : f(p). Inversement, une fonction sur des pointeurs

void g(int *);

peut être appelée avec un tableau en argument : g(t).   Ces deux déclarations de fonctions sont donc équivalentes.

L'accès par indexation à un tableau (unidimensionnel) s'applique également à un pointeur : on peut écrire p[2] comme t[2]. L'adresse de p[2], comme celle de t[2], est fonction de la valeur de p et de la taille (en octets) des éléments du tableau, qui est déterminée par le type qui apparaît dans la définition de p comme de t.

  double t[4];
  double *p = &t[1];

La valeur de p est une adresse, celle du deuxième élément du tableau t, mais le type de p est << pointeur de double >> ; cela permet, par exemple, de calculer l'adresse de p[2], qui est celle de t[3].


  
Figure 15: Pointeur sur un élément d'un tableau
\begin{figure}
 \begin{center}
 \leavevmode
 
\fbox {
 \epsfig{file=fig/array_ptr2.eps}
 }
 \end{center} \end{figure}


next up previous contents index
Next: Représentation unidimensionnelle des matrices Up: No Title Previous: L'opération & et le
Jean-Philippe Chancelier
9/29/1998