int *p, i;'' définit un pointeur p
sur int et une variable i de type int. L'adresse
0 est utilisée pour signifier qu'un pointeur ne pointe sur rien. Noter
qu'un pointeur sur un type T est une variable comme une autre,
ayant sa propre adresse qu'il est possible de stocker dans un pointeur de
type ``pointeur sur pointeur sur T'' (i.e. ``T * *'')
etc. Il y a deux opérations fondamentales :V, il est possible d'obtenir l'adresse de
V avec l'opérateur & : &V représente l'adresse mémoire
de V. P, il est possible de désigner l'objet
pointé par P (i.e. l'objet situé à l'adresse contenue dans
P) au moyen de l'opérateur (unaire) * :
``*P'' désigne l'objet pointé par P. Par exemple :
int i, *pi, k; i=3; pi = &i; // pi pointe sur i k = (*pi)+5; // identique à : k=i+5 (*pi) = k+2; // identique à : i = k+2 (*pi)++; // ici, i=11, k=8
//=========================
void permut(int * pa, int * pb)
{
int aux = (*pa);
(*pa) = (*pb);
(*pb) = aux;
}
L'appel de cette fonction permut doit prendre deux adresses : pour
échanger les valeurs des variables i et j, on écrirait
``permut(&i,&j);''.
Cette méthode (passage des adresses) est la seule possible en C (le passage
par référence n'existe pas). En fait, les mécanismes internes sont
similaires.