GÉNIE ÉLECTRIQUE

 

Dernière mise à jour 
19 août 2006

SOMMAIRE

     Les pointeurs

q       Ce sont des variables particulières qui contiennent l’adresse d’une variable, elles ont toujours le même format, sur 68HC11 un pointeur est une valeur sur 16bits.

q       Un pointeur est déclaré par une * précédée du type de donnée pointée

q       Le signe & devant une donnée indique l’adresse de celle ci et sa valeur.

q       char *p ; déclare un pointeur p sur un caractère

q       float *f ; déclare une pointeur sur un réel.

q       char *fonction(void)  déclare une fonction qui retourne un pointeur sur un caractère

q       void (*fonction) (void) déclare un pointeur sur une fonction

q       void (*fonction) (void) = 0x8000 crée un pointeur sur une fonction en 8000

exemples de manipulation de pointeurs

int     a=1,b=2,c ;        /*trois entiers dont deux initialisés*/

int     *p1,*p2 ;             /*deux pointeurs sur des entiers*/

p1=&a ;                       /*p1 contient l’adresse de la variable a*/

p2=p1 ;                       /*p2 contient maintenant aussi l’adresse de a*/

c=*p1 ;     /*c égale le contenue de l’adresse pointé par p1 donc c=a*/

p2=&b ;                       /*p2 pointe b*/

*p2=*p1                        /*la donnée à l’adresse pointé par p2 est placée dans l’adresse pointé par p1, cela revient à donc recopier a dans b*/

exemple d’utilisation des pointeurs : la fonction echange :

void echange(int i ,int j)

Zone de Texte:                                                       Lors de l’appelle par echange (x,y), les variables i,j,k sont localement crées dans la pile, i=x, j=y. i et j sont échangé mais pas x et y

 {
int k;
k=i;
i=j;
j=k;

}

 La fonction echange qui fonctionne s’écrit comme cela :

void echange(int *i ,int *j)

Zone de Texte:                                  I et j représente maintenant les adresses de x et y. k prend bien la valeur de x,  i celle de j puis j celle de k. Les valeur x et y ont alors été échangées.

 {
int k
;
k=*i ;
*i=*j ;
*j=k ;

}

 

 Genelaix - IUFM - Académie d'Aix-Marseille-août 2006